我打赌我在这里错误地使用了某些东西......
我的MVC3应用程序使用Pagedown提供javascript文本编辑器,降价转换器和实时预览。我使用它的“santizer”对象来剥离潜在危险的代码,正如在教学中所建议的那样 - 你可以在demo中看到它。
javascript代码如下所示:
(function () {
var converter1 = Markdown.getSanitizingConverter();
var editor1 = new Markdown.Editor(converter1);
editor1.run();
})();
此代码将标记的textarea
标记转换为编辑器,并使用santizing转换器删除不良内容。它在某些方面似乎有效。示例:
marquee
标记在演示中正确剥离。<p style="font-size:40em;">Super Big Text</p>
被剥离为Super Big Text
但有些事情是不正确的...当我插入一个假的javascript时:
TEXT `<script type="text/javascript">alert("gotcha!");</script>` MORE TEXT
并张贴表格,它以黄色的死亡屏幕轰炸出来:
Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted.
此字符串是否已安全编码,如&lgt;script
...等等?
问题我缺少什么来确保代码块和内联代码被正确转换,以便它们可以作为安全字符串发布到服务器?
答案 0 :(得分:6)
我缺少什么来确保代码块和内联代码被正确转换,以便它们可以作为安全字符串发布到服务器?
无。或者至少可能没有,假设您正在使用正确的输出转义创建textarea,如果使用Web窗体或MVC控件,您将会使用它。
YSOD显示任何和所有输入内容看起来像元素标记,无论您的应用程序是否正确处理输出转义或易受攻击。它并不表示XSS问题,而是一直发生。
如果您想允许包含看起来像元素标记的数据的用户输入(并且没有任何本质上危险的 - 您只需要使输出转义正确),请关闭请求验证。 完全虚假作为真正的安全功能,只会给你一种虚假的安全感;令人失望的是微软正在推动它,因为它背叛了对HTML注入的致命误解。
不幸的是,在ASP.NET 4下禁用它会更加恼人。您必须使用<httpRuntime requestValidationMode="2.0" />
重置旧模型,然后将ValidateRequest="false"
添加到页面。