我读了一些问题,试图找到一个好的解决方案来防止用户提供的URL(变成一个链接)中的XSS。我已经找到了one for PHP,但是我似乎找不到任何关于.Net的东西。
需要明确的是,我想要的是一个库,它将使用户提供的文本安全(包括unicode gotchas?)并确保用户提供的URL安全(用于a或img标记)
我注意到StackOverflow有非常好的XSS保护,但遗憾的是,MarkdownSharp似乎缺少他们的Markdown实现的一部分。(我的很多内容都使用MarkdownSharp )
发布于 2011-04-21 12:34:56
微软有Anti-Cross Site Scripting Library;你可以先看看它,确定它是否适合你的需求。他们还有关于如何避免XSS攻击的some guidance,如果你确定他们提供的工具不是你真正需要的,你可以效仿。
发布于 2011-04-22 16:15:01
这里有几件事需要考虑。首先,您已经拥有了ASP.NET Request Validation,它将捕获许多常见的XSS模式。不要完全依赖这一点,但这是一个很好的小增值。
下一步,您希望根据白名单验证输入,在本例中,白名单就是符合URL的预期结构。尝试使用Uri.IsWellFormedUriString来遵守RFC2396和RFC273:
var sourceUri = UriTextBox.Text;
if (!Uri.IsWellFormedUriString(sourceUri, UriKind.Absolute))
{
// Not a valid URI - bail out here
}AntiXSS的Encoder.UrlEncode非常适合编码要追加到网址的字符串,即在查询字符串中。问题是,您希望获取原始字符串,而不是转义字符,如正斜杠,否则http://troyhunt.com将以http%3a%2f%2ftroyhunt.com结束,您就会遇到问题。
由于您正在编码的上下文是一个HTML属性(即您正在设置的"href“属性),因此您希望使用Encoder.HtmlAttributeEncode:
MyHyperlink.NavigateUrl = Encoder.HtmlAttributeEncode(sourceUri);这意味着像http://troyhunt.com/<script>这样的字符串将被转义为http://troyhunt.com/<script> -但当然,请求验证无论如何都会先捕获这个字符串。
还可以看看OWASP排名前10的Unvalidated Redirects and Forwards。
发布于 2011-04-21 12:30:48
我认为您可以自己创建一个字符数组和另一个包含代码的数组,
如果你从数组中找到了字符,用代码替换它,这会对你有帮助!但绝对不是100%
字符数组
<
..。
代码数组
& lt;
& gt;
..。
https://stackoverflow.com/questions/5739493
复制相似问题