使用Markdown处理代码块(Pagedown)

时间:2012-01-30 21:54:58

标签: javascript html security post markdown

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

我的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 ...等等?

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

1 个答案:

答案 0 :(得分:6)

  

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

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

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

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

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