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安全性高级编程》

  • 相关阅读:
    Linux搭建测试环境详细步骤
    MongoDB基本查询
    数据库常用sql语句
    Js apply和call
    js中的事件委托
    javascript中的事件处理
    <a>标签的属性
    js中预加载图片
    Yahoo团队:网站性能优化的35条黄金准则
    js中用到的正则表达式
  • 原文地址:https://www.cnblogs.com/a311300/p/1430150.html
Copyright © 2011-2022 走看看