2010-12-23 82 views
1

我要保护我的网页防范脚本注入,当用户输入以下内容:使用降价

<script type="text/javascript"> 
    alert("hi"); 
</script> 

我用摊牌:

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); 
    }); 
} 

回答

1

其中一个可能有效的解决方案是在剥离标签之前,剥离源代码中的所有标签或HTML代码。

对于如何去除所有的HTML标签,有一对夫妇的方式做到这一点,你可以在这个问题上找到:

Strip HTML from Text JavaScript

对于如何HTML编码的标签,你可以使用这:

myString.replace(/</g, '&lt;').replace(/>/g, '&gt;'); 

注意:这将删除您在摊牌中使用HTML的能力。

0

我用HTML Purifier这都非常好,过滤用户输入并且高度可定制。

我认为你可以在MarkDown中使用它,尽管我从未尝试过。

+0

对不起,我使用MVC(C#)。 PHP不适合我。不管怎么说,还是要谢谢你。如果你不介意,请删除答案,我希望其他人看到这个问题没有答案。 – 2010-12-23 18:03:14

+0

我不认为你应该让人们删除他们的答案 – 2010-12-23 18:10:26

+0

@DanielPeñalba:答案可以用于其他一些使用PHP的人。为了避免将来发生混淆,请务必正确标记您的问题(没有C#标记...)。不用担心,SO的大量用户可以确保您很快得到其他答案(而且您已经拥有)。 – nico 2010-12-23 18:13:38

1

ShowDown页面会去除任何javascript,所以我不知道你的意思。但是你不能在客户端上这样做。如果这永远不会被提交给服务器,那么它并不重要。但是,99%的时间,你想把它存储在服务器上。

我认为最好的方法是创建一个服务器端DOM对象的HTML提交(这可能是欺骗和绕过ShowDown),并寻找任何脚本或其他危险标签。这并不简单!

对我来说,最好的折衷办法是使用服务器端降价语言(如https://github.com/charliesome/bbsharp),然后用它来生成html。然后,您可以在将HTML传递给将标记转换为HTML的工具之前,对其进行html编码。

2

如果您想要净化.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>

http://wpl.codeplex.com/