您的位置:首页 > 产品设计 > UI/UE

A potentially dangerous Request.Form value was detected from the client

2010-03-04 09:17 316 查看
该示例:源码

错误提示:

A potentially dangerous Request.Form value was detected from the client.

由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值。立马报错。

解决方案一:
在.aspx文件头中加入这句:
<%@ Page validateRequest="false" %>

解决方案二:
修改web.config文件:
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>

因为validateRequest默认值为true。只要设为false即可。

产生原因

这个错误提示,是在对页面内容,用JS进行动态增加时产生。由于失误把特殊符号(未经编码)放入了Form集合里。比如:

<input type='text' name='orderid' value=''<XXX>''>

Value中包含了“<”和'>',这种符号 放入了Form集合里,Asp.net认为不合法的。

参考:http://www.asp.net/learn/whitepapers/request-validation/

请求验证 - 防止脚本攻击

本文介绍了ASP.NET请求验证功能特征,默认情况下,应用程序阻止未经编码的HTML内容提交到服务器上。如果你的应用程序已经专门安全处理HTML数据, 此请求验证功能可以禁用。

适用于ASP.NET 1.1和ASP.NET 2.0。

请求验证中,是ASP.NET 1.1版以来的功能,防止接受内容包含未编码的HTML提交给服务器。 此功能旨在帮助防止某些脚本注入攻击,使客户端脚本代码或HTML可以不知不觉提交到服务器,存储,然后提交给其他用户。 我们仍然强烈建议您,在适当的时候验证所有的输入数据和HTML格式进行编码。

例如,您创建一个网页,要求用户的电子邮件地址,然后存储,电子数据库中的邮件地址。 如果用户输入的是<SCRIPT>alert("hello from script")</SCRIPT>,而不是一个有效的电子邮件地址,当该数据提出,如果没有正确编码,该脚本可以执行。请求验证ASP.NET的功能防止这种情况发生。

为什么这个功能非常有用

许多网站不知道他们是开放的简单脚本注入攻击,无论这些攻击的目的,是通过显示的HTML破坏网站的界面,或可能执行客户端脚本将用户重定向到一个黑客站点,脚本注入式攻击是Web开发人员必须对付的一个问题。

脚本注入攻击是所有Web开发人员必须关注的,无论是使用ASP.NET,ASP或其他网络开发技术。

ASP.NET请求验证功能,积极防止不容许非编码HTML内容由服务器处理,除非开发人员决定,让这些攻击的内容。

期待什么:错误页

下面的显示了一些示例ASP.NET代码:


运行在一个简单的页面,让你输入一些文本在文本框中,单击按钮,并在标签文本控件中显示结果:


然而,如果输入的是JavaScript代码,如
<script>alert("hello!")</script>
被输入并提交,我们会得到一个异常:


该错误信息,检测一个潜在危险的Request.Form值,以及提供更详细的发生内容以及如何改变该行为。 例如:

请求验证检测到有潜在危险的客户端输入值,并请求处理已中止。 该值可能指示,试图妥协,如过您的应用程序,安全站点脚本攻击。您可以通过设置
validateRequest=false
在Page指令或配置节中禁用请求验证。 然而,在这种情况下,强烈建议应用程序显式检查所有输入值。

网页上禁用请求验证

在网页您必须设置的页面指令
false validateRequest
属性禁用请求验证:

<%@ Page validateRequest="false" %>
注意:当禁用请求验证,内容可以被提交给一个网页,开发人员有责任确保内容经过编码和处理

禁用您的应用程序请求验证

在应用程序禁用请求验证,您必须修改或创建一个应用程序的Web.config文件和设置
<pages />
validateRequest属性
<pages />
部分
false


<configuration> <system.web> <pages validateRequest="false" /> </system.web> </configuration>
如果您希望在您的服务器上的所有应用程序禁用请求验证,你可以作出这种修改Machine.config文件。

注意:当禁用请求验证,内容可以提交您的应用程序,程序开发人员有责任确保内容正确编码或加工。


现在,如果下面的JavaScript被输入到文本
<script>alert("hello!")</script>
结果将是:



当关闭请求验证,为了防止这种情况发生的,我们需要给内容用HTML编码。

如何为HTML编码的内容

如果您已禁用请求验证,最好的做法是在存储和使用前,对内容进行HTML编码。 HTML编码将自动替换任何“<'或'>”(连同其他几个符号)与其相应的HTM标识的L编码。 例如,“<',取而代之的是 ‘<’ 和,“>“是由'代替‘>’。 浏览器使用这些特殊的代码以显示“<'或'>”在浏览器中。

在服务器端,使用Server.HtmlEncode(string)API,很容易对内容进行编码。 内容也可以很容易的解码,即回复到标准的HTML,使用
Server.HtmlDecode(string)
方法。


结果是:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐