选择显示字体大小

在asp.net中防止注入攻击

目的:

  • 对输入的字串长度,范围,格式和类型进行约束.
  • 在开发asp.net程序时使用请求验证防止注入攻击.
  • 使用asp.net验证控件进行输入验证.
  • 对不安全的输出编码.
  • 使用命令参数集模式防止注入攻击.
  • 防止错误的详细信息被返回到客户端.

      概述 :


      你应该在程序中验证所有的不信任输入.你应该假定所有的用户输入都是非法的.用户可以在应用程序中提供表单字段,查询字串,客户端cookies和浏览器环境值比如用户代理字串和ip地址等.

      弱输入校验通常为注入攻击提供了机会.下面是常见的利用弱输入校验或无输入校验进行攻击的手段.
  • sql 注入(sql injection). 如果你使用用户的输入值来动态构造sql语句,那么数据库可能执行攻击性的有害sql语句.
  • 跨站脚本(cross-site scripting). 跨站脚本攻击利用网页验证漏洞注入客户端脚本.接下来这些代码被发送到受信任的客户端电脑上并被浏览器解释执行.因为这些代码来自受信任的站点,所以浏览器无法得知这些代码是有害的.
  • 未授权的文件访问(unauthorized file access).如果你的代码从调用者那里接受输入,恶意用户可以看到你对文件的操作过程从而访问那些受保护的文件或者使用你的代码注入非法数据.

      注意 : 注入攻击可通过使用http或https secure socket layer(ssl) 连接. 传输加密技术不能用来防御攻击.

      通常的输入验证方法总结如下.你应在所有的需要通过网络输入的地方进行验证,比如文本框和其它表单输入字段, 查询字串参数,cookies,服务器端变量和网络方法参数.注意,过滤策略应该是只允许正确的输入然后拒绝非法输入.这是因为定义正确的输入策略比过滤所有的非法输入要容易,那通常很难包括所有的非法输入.

      通入如下几个方面验证输入内容:
  • 约束.验证是否输入的是正确的类型,字符长度,格式和范围.可以应用asp.net验证控件来约束服务器控件输入.约束其它来源的输入可以使用正则表达式和自定义的验证规则.
  • 拒绝.检测已知的有害数据输入并拒绝.
  • 过滤.有时候你会希望过滤掉用户输入中那些有安全隐患的那些部分.例如,你的程序允许自由格式的输入,比如备注字段,你会允许特定的安全html标记象<b>,<i>及其它的html标记.

      步骤提要

      通过以下步骤保护你的asp.net程序不受注入式攻击危害 :
  • 第一步.使用asp.net请求验证.
  • 第二步.约束输入.
  • 第三步.对不安全的输出进行编码.
  • 第四步.对sql查询语句使用命令参数.
  • 第五步.验证asp.net的出错信息没有泄漏至客户端.

      下面的章节将对这些步骤进行详细讨论.

      第一步.使用asp.net请求验证.

      默认地,asp.net 1.1和2.0请求验证会对送至服务器的数据检测是否含有html标记元素和保留字符.这可以防止用户向程序中输入脚本.请求验证会对照一个有潜在威胁的字符串列表进行匹配,如果发现异常它会抛出一个httprequestvalidationexception类型的异常.

      你可以在你的web.config文件中的<pages>元素中加入validaterequest="false" 或在单独的页面的@pages元素里面设置validaterequest = "false"来禁用此项功能.

      如果你想禁用请求验证功能,你可以仅在需要的页面禁用它.比如你在程序页面上包含一个可接受html格式输入的字段.

      确定在machine.config文件中请求验证功能被打开.
     
      请求验证功能在asp.net中被默认启用.你可以在machine.config.comments文件中看到如下的默认设置.

    <pages validaterequest = "true" ... />

      确认你没有修改你的服务器的machine.config和应用程序的web.config文件里的默认设置.

      测试asp.net请求验证

      你可以测试请求验证的作用.创建一个asp.net页面通过设置validaterequest = "fasle"禁用请求验证,代码如下 :

    <%@ language="c#" validaterequest="false" %>
    html
    <script runat="server">
    void btnsubmit_click(object sender, eventargs e)


    {

    //
    if validaterequest is false, then 'hello' is displayed

    //
    if validaterequest is true, then asp.net returns an exception

    response.write(txtstring.text);
    }
    </script>
    <body>
    <form id="form1" runat="server">
    asp:textbox id="txtstring" runat="server"
    text="<script>alert('hello');</script>" />
    asp:button id="btnsubmit" runat="server" onclick="btnsubmit_click"
    text="submit" />
    </form>
    </body>
    </html

      当你运行页面的时候,"hello"被显示在一个消息框中,因为在txtstring中的脚本被执行并被客户端的浏览器处理.

      如果你设置validaterequest = "true" 或者移除validaterequest页面属性,asp.net请求验证会拒绝脚本输入并抛出一个象下面这样的错误信息.
      a potentially dangerous request.form value was detected from the client (txtstring="<script>alert('hello").

      注意 不要仅仅依赖请求验证功能,而只是把它作为自定验证的辅导手段.


     


  • 关键字 本文所属关键字

    相关 与本文相关文章

    分类 所有文章关键字导航

    源码编程相关

    Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

    SQL数据库相关

    My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

    手机无线相关

    3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

    网页设计制作相关

    HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

    网站建设推广相关

    建站经验   网站优化   网站排名   推广   Alexa

    操作系统/服务器相关

    Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

    图形图像多媒体相关

    Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

    标准 网站致力的规范

    Valid CSS!

    无不良内容,无不良广告,无恶意代码

    Valid XHTML 1.0 Transitional

    creativecommons