使用Markdown处理代码块(Pagedown)

one*_*mer 2 html javascript security markdown post

我打赌我在这里错误地使用了一些东西......

我的MVC3应用程序使用Pagedown来提供javascript文本编辑器,降价转换器和实时预览.我使用它的"santizer"对象来剥离潜在危险的代码,就像在指令中建议的那样 - 你可以在演示中看到它.

javascript代码如下所示:

(function () {
    var converter1 = Markdown.getSanitizingConverter();
    var editor1 = new Markdown.Editor(converter1);
    editor1.run();
})();
Run Code Online (Sandbox Code Playgroud)

此代码将标记的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
Run Code Online (Sandbox Code Playgroud)

并张贴表格,它以黄色的死亡屏幕轰炸:

Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted.

这个字符串是否已经安全编码,如&lgt;script...等?

问题:我缺少什么来确保代码块和内联代码被正确转换,以便它们可以作为安全字符串发布到服务器?

bob*_*nce 6

我缺少什么来确保代码块和内联代码被正确转换,以便它们可以作为安全字符串发布到服务器?

没有.或者至少可能没有,假设您正在使用正确的输出转义创建textarea,如果使用Web窗体或MVC控件,您将会使用它.

该YSOD出现任何和看起来像元素的标记,所有输入的内容,无论您的应用程序是否处理正确输出转义或脆弱.它并不表示XSS问题,而是一直发生.

如果您希望允许包含看起来像元素标记的数据的用户输入(并且没有任何本质上危险的 - 您只需要将输出转义为正确),请关闭"请求验证".它完全是一种真正的安全功能,只会给你一种虚假的安全感; 令人失望的是微软正在推动它,因为它背叛了对HTML注入的致命误解.

不幸的是,在ASP.NET 4下禁用它会更加恼人.您必须重置旧模型,<httpRuntime requestValidationMode="2.0" />然后添加ValidateRequest="false"到页面.

  • 如果您希望输入验证能够正常工作,则必须根据预期的输入数据格式进行调整; ASP.NET RV是最愚蠢的粗刷方法,它会干扰完美的良好输入(如此处),同时实际上并没有保护您免受真正的攻击,这些攻击不会与其弱绘制相匹配"看起来有点像HTML元素"旗帜. (3认同)