C# 清除C中恶意数据中的原始HTML#
我正在编写ASP.NETMVC应用程序。有些HTML来自用户,有些来自第三方。有没有足够简单和快速的方法来清除HTML而不需要像HAP(HTML敏捷包)或Tidy这样的重炮 我只需要删除脚本、样式,C# 清除C中恶意数据中的原始HTML#,c#,asp.net-mvc,xss,C#,Asp.net Mvc,Xss,我正在编写ASP.NETMVC应用程序。有些HTML来自用户,有些来自第三方。有没有足够简单和快速的方法来清除HTML而不需要像HAP(HTML敏捷包)或Tidy这样的重炮 我只需要删除脚本、样式,/,href=“javascript:,样式=,onclick,我不认为通过.remove/.Replace手动删除它们是一种好方法,即使使用StringBuilder也是如此 在示例中,如果我有下一个输入 <html> <style src="http://harmyour
/
,href=“javascript:
,样式=
,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>
一些要测试的文本
破坏你的布局
还有一个图像
好的跨度,坏的属性
你可爱的java可以在那里
必须将其转换为下一个:
<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>
坏链接
一些要测试的文本
破坏你的布局
还有一个图像
好的跨度,坏的属性
那么,如何以正确的方式使用标签和anttributes的白名单来做到这一点呢
UPD:我尝试使用StackExchange HtmlHelpers库,但它删除了所需的标记,如
div
、a
和img
,实现这一点的最快方法是使用正则表达式
var regex = new Regex(
"(\\<script(.+?)\\</script\\>)|(\\<style(.+?)\\</style\\>)|(\\<object(.+?)\\</object\\>)",
RegexOptions.Singleline | RegexOptions.IgnoreCase
);
string ouput = regex.Replace(input, "");
为什么在任何情况下都允许用户输入HTML?您可能希望禁止最终用户的HTML输入,并使用标记语言或某种编码,而不仅仅是原始输入。
Sanitizer.GetSafeHtmlFragment(input);