zoukankan      html  css  js  c++  java
  • Web应用程序安全性简介

    "安全性"的定义

    安全性是系统设计、实现和管理的一部分,其作用是保证系统可以完全按照人们想要的方式运行。从另一个角度来说,安全性的作用是防止以我们不希望出现的方式使用系统。

    "安全"的含义

    我们永远不能保证一个系统是完全安全的。这就是说,"安全"并不意味着"百分之百的安全".使用"安全"一词时,实际上是说,如果要凭借现有的知识基础以我们不希望的方式使用系统,那是基本不可能的,进而不必考虑这种情况的发生概率。个人理解这句话是,安全性的提高是减少发生不安全行为的概率。如果当概率足够小的时候,就可以认为是安全的。

    安全的其他定义

    脆弱性(vulnerability)是系统的一个特征,它可能会使应用程序不完全按照预想的方式运行。容易遭受攻击的状态。

    威胁(threat)指利用脆弱性破坏系统安全的可能性。

    利用(exploit)是一种利用脆弱性的方法,其目的是实现威胁并让系统按照非原定计划的方式运行。在利用脆弱性之前,风险只是理论上的说法。

    有些利用模型很小,但他也有些利用将创建复杂的代码.现在对流行软件的脆弱性的新利用,是每时每刻都在进行着的事情。

    将这三个概念放在一起看,脆弱性导致了威胁,利用则实现威胁。这个过程就是通常所说的攻击(attack)

    Web应用程序的攻击类型

    1.未经授权的访问--用户获得了更多的权限,从而可以将应用程序用于其他途径。这种威胁常常导致其他的威胁,但它可以自行终止。

    2.代码执行--在目标系统上运行恶意代码。

    3.拒绝服务--合法用户被禁止访问应用程序。

    4.信息失窃--私有信息受到危害。

    5.破坏信息--信息遭到修改。

    Web应用程序的攻击方式

    1.缓冲区溢出

    2.脚本注入和跨站点脚本处理

    3.SQL注入

    4.分布式拒绝服务

    5.社交工程

    6.蛮力攻击

    安全并不仅仅是拦贼于门外

    安全还包括在系统内特定用户访问特定权限。用户不能访问没有分配的权限。

    安全由谁来负责

    程序设计者需要保证程序的结构是安全的。

    网络管理员要保证网络和服务器是安全的。

    程序员要保证他们的代码不会引入脆弱性。

    管理人员要保证他们的团队戒备安全问题。

    数据库管理员要确保数据库服务器没有脆弱性。

    用户需要提防交社交工程攻击等事情。

    当然,还有其他很多任务要做好分开,才能实现安全。

    ASP.NET开发人员力所不及的安全问题

    1.       网络

    Web应用程序是依附于网络才能有效运行的。如果网络连接因为受到拒绝服务式攻击而被中断了,应用程序将不再运行。假如恶意用户可以侦听网络通信量,他们就可以采集到那些不允许他们访问的信息。

    2.       Web服务器

    支持应用程序的服务器必须是安全的。否则,恶意用户可能肆意更改应用程序,而我们所做的安全工作也将徒劳无功。

    为了给ASP.NET提供安全的运行环境,必须对   WindowsInternet信息服务(IIS)进行安全配置。对Windows的配置走出了本书的范围,但考虑到很多ASP.NET开发人员同时也负责配置IIS

    3.       数据库服务器

    大部分ASP.NET应用程序都要用到数据库。如果数据库被破坏了,应用程序就会受到影响。

    4.       客户端

    尽管客户端代码对我们很有用处,可我们终究不能控制客户端。举个例子讲,Javascript的确认代码是很有用的,可是总有办法绕过。

    ASP.NET开发人员的职责

    1.       将安全放在第一位

    构建并维护具有一定安全等级的系统,是一件重要而又困难的事情,可很多公司员工认识不到这一点。过去的一段时间里,安全往往是被视为外部问题,而不是作为核心问题来考虑的。

    客户和管理者永远也不会同意为了某个功能而花费金钱,除非他们能够看到明显的好处。如果要获得在安全问题上投入时间和金钱的好处,就要理解忽视安全问题所带来的风险。

    作为程序员,有责任教育公司里的其他人,使他们懂得安全的重要性。我们应该确保人们不再像以前那样轻描淡写地讨论安全问题,而是把它当做一个核心功能能引入系统。还要确保安全在应用程序部署以及其他方面都保持有优先的权利。

    安全功能永远都应该是系统的一个核心功能。如果不是,我们应该要求它得到重视。

    2.       实现稳固的安全功能

    为了达到系统安全的目的,作为ASP.NET开发人员,我们显然应该在应用程序中增加功能,使它支持安全性。对控制应用程序的使用方式进行一些恰当的选择,这也是我们肩负的责任。

    请务必记住,最安全的系统都是经过严格测试和审查的。这意味着解决安全问题的时候,使用已有的解决方案几乎总是比自己编写代码要好。即使是对已有的方案做很小的修改,也要进行周密的检查,确保修改不会破坏安全。

    3.       避免增加新的脆弱性

    向应用程序中增加的每一句代码,都可能会增添新的脆弱性。对这部分新代码必须严格审查,以确保它们不会造成可能危及应用程序的安全漏洞。一个相对好的方法是,从最初阶段就确保开发中的应用程序的每部分都是安全的。

    4.       帮助用户提高安全意识

    教育用户使他们懂得安全问题,这是非常有益的。从实施社交攻击的人数就可以看出,现在用户本身就提供了经常被利用的脆弱性。

    可是不管怎样努力地教育用户,总是还有用户对他人的建议不加重视。所以,在安全问题上不能够依赖用户。对待用户不妨强制他们尽可能地保证安全,不给非技术人员作出决定的机会,因为他们的决定可能造成不安全。

    5.       警惕数据的流动和泄漏

    数据可能由连线流入客户端的时候更是如此,因为客户端是我们不能控制的。

    6.       保持更新

    大部分的脆弱性都是在出现不久就被解决,这往往是由软件厂商发布补丁来实现的,紧跟他们的动态,使用补丁,接受保护。

     

    一些安全建议

    1.没有百分之百的安全,但还是应该尽可能地加强防范。

    2.隐藏起来并不安全,永远假定攻击者知晓系统内情。

    3.应用程序的安全程度由它最薄弱的环境决定,把系统每个部分都看作可能遭受攻击的对象,并注意和其他系统安全负责人员保持良好的沟通。

    4.安全问题在开发过程的每一阶段都很重要,优先考虑安全问题,不要出了问题再后悔。

    5.安全领域的工作是做不完的,若要维护安全,请制定动态工作计划。

    6.过分限制的安全可能不利于产品开发,要考虑到系统的日常用户如何对待安全系统。

    7.安全并不完全是技术问题,把安全当作业务的关键方面的来考虑。

    8.不可依赖用户来维护安全,向用户提供选择机会的时候,要考虑到最坏的情况,只要有不安全的选项,用户就有可能采纳它。

    本文节录自《ASP.NET安全性高级编程》

  • 相关阅读:
    IIS7中的几种身份鉴别方式(一)Basic身份验证
    IIS7中的几种身份鉴别方式(二)集成身份验证
    java集合
    SharePoint 2010中welcome page的设置细节
    SharePoint中使用Linq出现未将对象引用到实例化的解决方法
    SharePoint 2010中关于An error was encountered while retrieving the user profile的处理方式记录
    The Need for an Architectural Body of Knowledge
    The Softer Side of the Architect
    Event Receivers 学习小结
    使用SmtpClient发送带图片的邮件的代码实现
  • 原文地址:https://www.cnblogs.com/luluping/p/1499551.html
Copyright © 2011-2022 走看看