黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 黑客安全 >> 正文
·没有路由密码权限时的鸽08-23·上网安全 Vista自我防范10-11
·让濒临崩溃的Windows XP10-11·有备无患,快速自制救急10-11
·要你好看!Windows看图工10-11·空间赞助网提供不同类型10-11
·讨论net.exe和net1.exe的10-10·让3389远程桌面传输更通10-10
·巧妙入侵渗透赌博站10-10·Aspx空间扫权限工具10-10
·Windows2003最新提权工具10-10·易淘乐提供100M免费全能10-10
·系统开机密码忘了不着急10-09·中意网络提供免费100M免10-09
·与众不同 Windows XP开始10-08·让桌面图标翻跟斗 在XP上10-08
·上海宽元站长资助计划-提10-08·个性化Windows XP的任务10-07
·趣盘提供3G免费网络硬盘10-07·秀山热线提供200MB免费全10-07
·一次艰辛的提权过程10-06·成功入侵IT大卖场的渗透10-06
·mysqlhack- MYSQL利用工10-06·lanker一句话PHP后门客户10-06
·WIXI提供3G免费多媒体网10-06·新人网络提供100M/ftp免10-06
·如何利用QQ带来高流量10-05·UuShare提供免费网络文件10-05
[推荐]在ASP.NET中防止注入攻击
      ★★★★

在ASP.NET中防止注入攻击

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-4-3 9:09:23

目的:
对输入的字串长度,范围,格式和类型进行约束. 
在开发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").

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

[1] [2] [3] [4] 下一页

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体:
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886