当前位置:  开发笔记 > 编程语言 > 正文

检测到一个潜在危险的request.form值,但validateinput(false)无效

如何解决《检测到一个潜在危险的request.form值,但validateinput(false)无效》经验,为你挑选了2个好方法。

我已经安装了VS2010和MVC2并使用tinyMCE测试了一个简单的表单.当我在tinyMCE中发布textarea的内容时,我得到了可怕的YSD和消息

"有潜在危险......"

我以前见过这个,所以我把它ValidateInput(false)放在控制器上,但没有快乐 - 我仍然得到错误.

edit.aspx中的页面代码是:

    <% using (Html.BeginForm()){ %>

    
    

    
<%} %>

和控制器的行动是:

    [AcceptVerbs(HttpVerbs.Post)]
    [ValidateInput(false)]
    public ActionResult Edit(string mceText)
    {

        return View();
    }

任何想法 - (我知道代码不完整)已经尝试了几个小时,但每个人只是说使用ValidateInput(false)



1> Maksymilian ..:

这就是为什么:http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes#0.1__Toc256770147

ASP.NET中的请求验证功能为跨站点脚本(XSS)攻击提供了一定级别的默认保护.在以前版本的ASP.NET中,默认情况下启用了请求验证.但是,它仅适用于ASP.NET页面(.aspx文件及其类文件),并且仅在这些页面执行时才应用.

在ASP.NET 4中,默认情况下,为所有请求启用请求验证,因为它在HTTP请求的BeginRequest阶段之前启用.因此,请求验证适用于所有ASP.NET资源的请求,而不仅仅是.aspx页面请求.这包括Web服务调用和自定义HTTP处理程序等请求.当自定义HTTP模块正在读取HTTP请求的内容时,请求验证也处于活动状态.

因此,现在可能会对先前未触发错误的请求发生请求验证错误.若要还原到ASP.NET 2.0请求验证功能的行为,请在Web.config文件中添加以下设置:


但是,我们建议您分析任何请求验证错误,以确定现有处理程序,模块或其他自定义代码是否访问可能是XSS攻击媒介的可能不安全的HTTP输入.



2> mutex..:

更好的解决方案可能是使用tinymce编码选项:

http://www.tinymce.com/wiki.php/Configuration:encoding

tinyMCE.init({
        ...
        encoding : "xml"
});

然后使用HttpUtility.HtmlDecode根据需要对其进行解码.

请参见http://blog.tentaclesoftware.com/archive/2010/07/22/96.aspx

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有