Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 清除C中恶意数据中的原始HTML#_C#_Asp.net Mvc_Xss - Fatal编程技术网

C# 清除C中恶意数据中的原始HTML#

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

我正在编写ASP.NETMVC应用程序。有些HTML来自用户,有些来自第三方。有没有足够简单和快速的方法来清除HTML而不需要像HAP(HTML敏捷包)或Tidy这样的重炮

我只需要删除脚本、样式,
/
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);