ASP.Net有任何反XSS库吗?

时间:2011-04-21 04:26:11

标签: asp.net security xss markdown antixsslibrary

我正在阅读一些问题,试图找到一个很好的解决方案来防止用户提供的URL中的XSS(它变成一个链接)。我找到了one for PHP,但我似乎无法为.Net找到任何东西。

要清楚,我想要的是一个库,它可以使用户提供的文本安全(包括unicode陷阱?)并使用户提供的URL安全(在aimg标签中使用)

我注意到StackOverflow具有非常好的XSS保护,但遗憾的是MarkdownSharp似乎缺少部分Markdown实现。 (我使用MarkdownSharp获取了很多内容)

4 个答案:

答案 0 :(得分:6)

Microsoft拥有Anti-Cross Site Scripting Library;您可以先看看它并确定它是否符合您的需求。如果你确定他们提供的工具并不是你真正需要的,那么他们也有some guidance如何避免你可以遵循的XSS攻击。

答案 1 :(得分:2)

这里有几点需要考虑。首先,你有ASP.NET Request Validation,它将捕获许多常见的XSS模式。不要完全依赖于此,但这是一个不错的小增值。

接下来,您要根据白名单验证输入,在这种情况下,您的白名单是完全符合URL的预期结构。尝试使用Uri.IsWellFormedUriString来遵守RFC 2396和RFC 273:

var sourceUri = UriTextBox.Text;
if (!Uri.IsWellFormedUriString(sourceUri, UriKind.Absolute))
{
  // Not a valid URI - bail out here
}

AntiXSS具有Encoder.UrlEncode,非常适合编码要附加到URL的字符串,即查询字符串。问题是你想要获取原始字符串而转义字符,例如正斜杠,否则http://troyhunt.com最终为http%3a%2f%2ftroyhunt.com并且你遇到了问题。

由于您编码的上下文是HTML属性(它是您正在设置的“href”属性),您想使用Encoder.HtmlAttributeEncode:

MyHyperlink.NavigateUrl = Encoder.HtmlAttributeEncode(sourceUri);

这意味着像http://troyhunt.com/<script>这样的字符串会被转义为http://troyhunt.com/&lt;script> - 但当然,请求验证会首先捕获该字符串。

另请参阅OWASP Top 10 Unvalidated Redirects and Forwards

答案 2 :(得分:0)

我认为你可以通过创建一个charecters数组和另一个带代码的数组来自己做 如果您发现数组中的字符将其替换为代码,这将对您有所帮助! [但绝对不是100%]

字符数组
&LT;
&GT;
...

代码阵列
&安培; LT;
&安培; GT;
...

答案 3 :(得分:0)

我依靠HtmlSanitizer。它是一个.NET库,用于从可导致XSS attacks的构造中清除HTML片段和文档。 它使用AngleSharp来解析,操作和呈现HTML和CSS。

因为HtmlSanitizer基于强大的HTML解析器,所以它也可以保护您免受故意或意外 &#34;标签中毒&#34;其中一个片段中的无效HTML可能会破坏整个文档,导致布局或样式损坏。

用法:

var sanitizer = new HtmlSanitizer();
var html = @"<script>alert('xss')</script><div onload=""alert('xss')"""
    + @"style=""background-color: test"">Test<img src=""test.gif"""
    + @"style=""background-image: url(javascript:alert('xss')); margin: 10px""></div>";
var sanitized = sanitizer.Sanitize(html, "http://www.example.com");
Assert.That(sanitized, Is.EqualTo(@"<div style=""background-color: test"">"
    + @"Test<img style=""margin: 10px"" src=""http://www.example.com/test.gif""></div>"));

还有一个online demo,还有一个.NET Fiddle你可以玩。

(从他们的自述文件中复制/粘贴)