我想在用户输入以下内容时保护我的页面:
<script type="text/javascript">
alert("hi");
</script>
我正在使用ShowDown:
jQuery.fn.markDown = function()
{
return this.each(function() {
var caller = this;
var converter = new Showdown.converter();
var text = $(caller).text();
var html = converter.makeHtml(text);
$(caller).html(html);
});
}
答案 0 :(得分:3)
如果要在.NET服务器端代码上清理html,我建议您在将标记转换为html之后使用Microsoft web protection library,然后再将其呈现给页面。 例如以下片段:
x = @"<div>safe</div>
<script type='text/javascript'>
alert('hi');
</script>";
return Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(x);
返回<div>safe</div>
答案 1 :(得分:1)
ShowDown页面会删除任何javascript,所以我不知道你的意思。但你不能在客户端上这样做。如果永远不会将其提交给服务器,则无关紧要。但是,99%的情况下,您希望将其存储在服务器上。
我认为最好的方法是从提交的html中创建服务器端DOM对象(可能是欺骗并绕过ShowDown)并查找任何脚本或其他危险标记。这不是那么简单!
对我来说,最好的妥协是使用服务器端降价语言(如https://github.com/charliesome/bbsharp),然后您可以使用它来生成html。然后,您将html编码任何html,然后将其传递给将markdown转换为HTML的工具。
答案 2 :(得分:1)
可能有效的解决方案之一是在使用Showdown转换之前剥离源中的所有标记或对标记进行HTML编码。
关于如何删除所有HTML标记,有几种方法可以在这个问题中找到:
Strip HTML from Text JavaScript
有关如何对标记进行HTML编码,您可以使用:
myString.replace(/</g, '<').replace(/>/g, '>');
注意:这将使您无法在Showdown中使用HTML。
答案 3 :(得分:0)
我使用HTML Purifier,它非常适合过滤用户输入,并且可以高度自定义。
我假设您可以将它与MarkDown一起使用,但我从未尝试过。