我已经安装了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)
这就是为什么: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输入.
更好的解决方案可能是使用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