我已经安装了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" />
<%} %>
和控制器操作是:
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
public ActionResult Edit(string mceText)
{
return View();
}
任何想法 - (我知道代码不完整)已经尝试了几个小时但是每个人都说使用ValidateInput(false)
答案 0 :(得分:5)
这就是原因:http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes#0.1__Toc256770147
ASP.NET中的请求验证功能提供了一定的级别 针对跨站点脚本(XSS)攻击的默认保护。在 在以前版本的ASP.NET中,请求验证已启用 默认。但是,它仅适用于ASP.NET页面(.aspx文件和 他们的类文件)并且只有在那些页面正在执行时才会发生。
在ASP.NET 4中,默认情况下,为所有人启用请求验证 请求,因为它在BeginRequest阶段之前启用 HTTP请求。因此,请求验证适用于请求 所有ASP.NET资源,而不仅仅是.aspx页面请求。这包括 请求,例如Web服务调用和自定义HTTP处理程序。请求 当自定义HTTP模块正在读取时,验证也处于活动状态 HTTP请求的内容。
因此,请求现在可能会发生请求验证错误 以前没有触发错误。要恢复到的行为 ASP.NET 2.0请求验证功能,添加以下设置 在Web.config文件中:
<httpRuntime requestValidationMode="2.0" />
但是,我们建议您分析任何请求验证错误 确定是否存在现有处理程序,模块或其他自定义代码 访问可能是XSS攻击的潜在不安全的HTTP输入 载体
答案 1 :(得分:5)
更好的解决方案可能是使用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
答案 2 :(得分:3)
找到它。
需要添加<httpRuntime requestValidationMode="2.0"/>
答案 3 :(得分:3)
只需:编码:“xml”单引号编码为:&amp;#39但ASP.NET验证将其视为安全漏洞,我们必须将所有&amp;#39替换为html&amp; amp:
tinyMCE.init({
// ...
encoding: "xml",
setup: function (ed) {
ed.onSaveContent.add(function (ed, o) {
o.content = o.content.replace(/'/g, "&apos");
});
}
});
感谢Eddie。