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

从客户端中检测到有潜在危险的 Request.Form 值的详细解决方法

2017-04-30 00:14 423 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本人声明。否则将追究法律责任。

作者:永恒の_☆    地址:http://blog.csdn.net/chenghui0317/article/details/9622837
在 .NET MVC 的项目中有用到百度编辑器的富文本框,然后 提交表单到后台报错:

从客户端(Content="<p>测试</p>")中检测到有潜在危险的 Request.Form
值。

一看就知道是传递的字符串中包含了html 标签,然后服务器检查出来了没有通过,所以需要来做处理。

网上有多例子说 在<pages>标签中加上validateRequest=“false”这个属性就好了,代码如下:

[html]
view plain
copy

print?

<system.web >  
<pages validateRequest="false" ></pages >   
</system.web >  



<system.web >
<pages validateRequest="false" ></pages >
</system.web >


但是根本不起作用。。

之后在别的地方看到特别的,针对MVC项目的处理方式不一样。

需要再方法前面 加上[ValidateInput(false)] 过滤掉 用户传递的输入的验证,例子如下:

[csharp]
view plain
copy

print?

[HttpPost]  
[ValidateInput(false)]  
public ActionResult Add(User user)  
{  
return View();  
}  



[HttpPost]
[ValidateInput(false)]
public ActionResult Add(User user)
{
return View();
}


然后发现还是不行,原来自己用的是MVC3.0 ,需要再UI 目录下的web.config  中配置一下, 即在<system.web>中指定验证模式为2.0  ,代码如下:

[html]
view plain
copy

print?

<system.web >  
<httpRuntime requestValidationMode="2.0" />  
</system.web >  



<system.web >
<httpRuntime requestValidationMode="2.0" />
</system.web >


这是因为3.0的验证模式非常严格,即使加上了[ValidateInput(false)] 也过滤不了。。。所以 才要在web.config 中配置一下。

特别地,如果放在Views 目录下的web.config 中会没有效果的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐