处理asp.net出现A potentially dangerous Request.Form value was detected from the client

错误提示:
A potentially dangerous Request.Form value was detected from the client

(txtTest="<b>").
 
由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危
 
险性值。立马报错。
 
解决方案一:
在.aspx文件头中加入这句:
<%@ Page validateRequest="false" %>

解决方案二:
修改web.config文件:
<configuration>
<system.web>
    <pages validateRequest="false" />
</system.web>
</configuration>
因为validateRequest默认值为true。只要设为false即可。
文章来自学IT网:http://www.xueit.com/html/2008-08/117_1298_00.html错误提示:
A potentially dangerous Request.Form value was detected from the client

(txtTest="<b>").
 
由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危
 
险性值。立马报错。
 
解决方案一:
在.aspx文件头中加入这句:
<%@ Page validateRequest="false" %>

解决方案二:
修改web.config文件:
<configuration>
<system.web>
    <pages validateRequest="false" />
</system.web>
</configuration>
因为validateRequest默认值为true。只要设为false即可。
文章来自学IT网:http://www.xueit.com/html/2008-08/117_1298_00.html错误提示:
A potentially dangerous Request.Form value was detected from the client

(txtTest="<b>").
 
由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危
 
险性值。立马报错。
 
解决方案一:
在.aspx文件头中加入这句:
<%@ Page validateRequest="false" %>

解决方案二:
修改web.config文件:
<configuration>
<system.web>
    <pages validateRequest="false" />
</system.web>
</configuration>
因为validateRequest默认值为true。只要设为false即可。
文章来自学IT网:http://www.xueit.com/html/2008-08/117_1298_00.html

A potentially dangerous Request.Form value was detected from the client 的解决方法

System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client

方法一:通过在 Page 指令或 配置节中设置 validateRequest="false" 可以禁用请求验证

方法二:正确的做法是在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中产生的而没有处理的异常。然后给用户一个合法的报错信息。要是当前页面没有Page_Error(),这个异常将会送到Global.asax的Application_Error()来处理,你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面呢。

  举例而言,处理这个异常其实只须要很简短的一小段代码就够了。在页面的Code-behind页面中加入这么一段代码:

 

以下是引用片段:
protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("请您输入合法字符串。");
Server.ClearError(); // 要是不ClearError()这个异常会继续传到Application_Error()。
}
}

  这样这个程序就可以截获 HttpRequestValidationException 异常,而且可以按照程序员的意愿返回一个合理的报错信息。

  这段代码很简单,所以我希望所有不是真的要允许用户输入之类字符的朋友,千万不要随意的禁止这个安全特性,如果只是须要异常处理,那么请用类似于上面的代码来处理即可。

  而对于那些通过明确禁止了这个特征的程序员,自己一定要明白自己在做什么,而且一定要自己手动的检查必须过滤的字符串,否则你的站点非常容易引发跨站脚本攻击。

  关于存在Rich Text Editor的页面应当如何处理?

  要是页面有富文本编撰器的控件的,那么必定会导致有类的HTML标签提交回来。在这种状况下,我们不得不将validateRequest="false"。那么安全性怎么处理?如何在这种状况下最大限度的预防跨站脚本攻击呢?

  根据微软的建议,我们应该采取安全上称为“默认禁止,显式容许”的策略。

  首先,我们将输入字符串用 HttpUtility.HtmlEncode()来编码,将其中的HTML标签彻底禁止。

  然后,我们再对我们所感兴趣的、并且是安全标签,通过Replace()进行替换。譬如,我们希望有""标签,那么我们就将""显式的替换回""。

  示例代码如下:

 

以下是引用片段:
void submitBtn_Click(object sender, EventArgs e)
...{
// 将输入字符串编码,这样所有的HTML标签都失效了。
StringBuilder sb = new StringBuilder(
HttpUtility.HtmlEncode(htmlInputTxt.Text));
// 然后我们选择性的允许<b> 和 <i>
sb.Replace("&lt;b&gt;", "<b>");
sb.Replace("&lt;/b&gt;", "");
sb.Replace("&lt;i&gt;", "<i>");
sb.Replace("&lt;/i&gt;", "");
Response.Write(sb.ToString());
}

  这样我们即容许了部分HTML标签,又禁止了危险的标签。

  依据微软提供的建议,我们要慎重容许下列HTML标签,因为这些HTML标签都是有可能导致跨站脚本攻击的。

 

以下是引用片段:
  • <applet>
  • <body>
  • <embed>
  • <frame>
  • <script>
  • <frameset>
  • <html>
  • <iframe>
  • <img>
  • <style>
  • <layer>
  • <link>
  • <ilayer>
  • <meta>
  • <object>

  可能这里最让人不能理解的是<img>。但是,看过下列代码后,就应当明白其危险性了。

 

以下是引用片段:
<img src="javascript:alert('hello');">
<img src="java script:alert('hello');">
<img src="java script:alert('hello');">

  通过<img>标签是有可能导致Javascript执行的,这样攻击者就可以做他想伪装的任何事情。

  关于<style>也是一样:

 

以下是引用片段:
<style TYPE="text/javascript">...
alert('hello');
</style>

 来自:http://blog.sina.com.cn/s/blog_4e6dffee0100ki3n.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值