我已经安装了VS2010和MVC2并使用tinyMCE测试了一个简单的表单.当我在tinyMCE中发布textarea的内容时,我得到了可怕的YSD和消息
"有潜在危险......"
我以前见过这个,所以我把它ValidateInput(false)放在控制器上,但没有快乐 - 我仍然得到错误.
edit.aspx中的页面代码是:
<% using (Html.BeginForm()){ %>
<!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
<textarea id="elm1" name="mceText" rows="15" cols="80" style="width: 80%">
<p>
This is some example text that you can edit inside the
<strong> TinyMCE editor</strong>.
</textarea>
<br />
<input type="submit" name="save" value="Submit" />
<input type="reset" name="reset" value="Reset" />
<%} %>
Run Code Online (Sandbox Code Playgroud)
和控制器的行动是:
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
public ActionResult Edit(string mceText)
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
任何想法 - (我知道代码不完整)已经尝试了几个小时,但每个人只是说使用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文件中添加以下设置:
<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)
但是,我们建议您分析任何请求验证错误,以确定现有处理程序,模块或其他自定义代码是否访问可能是XSS攻击媒介的可能不安全的HTTP输入.
更好的解决方案可能是使用tinymce编码选项:
http://www.tinymce.com/wiki.php/Configuration:encoding
tinyMCE.init({
...
encoding : "xml"
});
Run Code Online (Sandbox Code Playgroud)
然后使用HttpUtility.HtmlDecode根据需要对其进行解码.
请参见http://blog.tentaclesoftware.com/archive/2010/07/22/96.aspx
| 归档时间: |
|
| 查看次数: |
5356 次 |
| 最近记录: |