【发布时间】:2016-05-05 17:28:11
【问题描述】:
我正在编写 ASP.NET MVC 应用程序。一些 HTML 来自用户,一些来自第三方来源。有没有像 HAP(Html Agility Pack)或 Tidy 这样的重型火炮的简单和快速的方法来清理 HTML?
我只需要删除脚本、样式、<object>/<embed>、href="javascript:"、style=、onclick,而且我认为通过 .Remove/.Replace 手动删除它们不是一个好方法使用 StringBuilder。
例如,如果我有下一个输入
<html>
<style src="http://harmyourpage.com"/>
<script src="http://killyourdog.com"/>
<div>
<a href="http://co.com">Good link</a>
<a href="javascript::harm()">Bad link</a>
<p>Some text <b>to</b> test</p><br/>
<h1 style="position:absolute;">Damage your layout</h1>
And an image there <img src="http://co.com/a.jpg"/><br>
<span onclick="harm()">Good span with bad attribute</span>
<object>Your lovely java can be there</object>
</div>
</html>
必须转换成next:
<div>
<a href="http://co.com">Good link</a>
<a>Bad link</a>
<p>Some text <b>to</b> test</p><br/>
<h1>Damage your layout</h1>
And an image there <img src="http://co.com/a.jpg"/><br>
<span>Good span with bad attribute</span>
</div>
那么,如何以正确的方式使用标签和属性白名单?
UPD:我尝试了 StackExchange HtmlHelpers 库,但它删除了所需的标签,例如 div、a 和 img。
【问题讨论】:
-
为什么在任何情况下都允许来自用户输入的 HTML?
-
您可能希望禁止最终用户的 HTML 输入,并使用降价语言或某种编码,而不仅仅是原始输入。
标签: c# asp.net-mvc xss