【聚杰网Asp.Net】在ASP.NET中防止注入攻击微软开发专栏ASP.NET
概述 :
你应该在程序中验证所有的不信任输入.你应该假定所有的用户输入都是非法的.用户可以在应用程序中提供表单字段,查询字串,客户端cookies和浏览器环境值比如用户代理字串和IP地址等.
弱输入校验通常为注入攻击提供了机会.下面是常见的利用弱输入校验或无输入校验进行攻击的手段.
注意 : 注入攻击可通过使用HTTP或HTTPS Secure Socket Layer(SSL) 连接. 传输加密技术不能用来防御攻击.
通常的输入验证方法总结如下.你应在所有的需要通过网络输入的地方进行验证,比如文本框和其它表单输入字段, 查询字串参数,cookies,服务器端变量和网络方法参数.注意,过滤策略应该是只允许正确的输入然后拒绝非法输入.这是因为定义正确的输入策略比过滤所有的非法输入要容易,那通常很难包括所有的非法输入.
通入如下几个方面验证输入内容:
步骤提要
通过以下步骤保护你的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
").注意 不要仅仅依赖请求验证功能,而只是把它作为自定验证的辅导手段.
以下相关文章您是否也应该阅读一下
在ASP.NET程序中实现语音合成微软开发专栏ASP.NET 在ASP.NET 2.0中实现数据的绑定 在ASP.NET 中为图像加入版权信息 在ASP.NET 2.0中实现本地化 在ASP.Net 2.0中实现多语言界面的方法微软开发专栏ASP.NET 开发基于ASP.NET的自定义日志系统微软开发专栏ASP.NET 在ASP.NET 2.0中实现异常管理微软开发专栏ASP.NET 在ASP.NET中自动给URL加上超链接微软开发专栏ASP.NET 在ASP.NET Atlas中创建自定义Behavior微软开发专栏ASP.NET 在ASP.NET Atlas中创建自定义Action微软开发专栏ASP.NET






