我正在使用一些正则表达式来清理文本中的标签
static string Pattern = "<(?:[^>=]|='[^']*'|=\"[^\"]*\"|=[^'\"][^\\s>]*)*>";
static public string StripHtml(string Value)
{
return Regex.Replace(Value, Pattern, string.Empty);
}
虽然这看起来很安全,但我想知道它是否真的安全?有没有不使用标签就可以执行 XSS 的方法?
使用 markdown 编辑器会更好吗,还是因为它们也允许标签,所以仍然会出现类似的问题?
或者我应该手动解析我想要的标签并允许它们放置任何内容?
最佳答案
您没有指定您使用的是哪种 ESAPI 语言,但如果您需要在您的应用程序中接受 HTML,则正则表达式是 100% 的错误解决方案。这是因为 HTML is a context free language并且正则表达式无法解析它。
你想要类似 OWASP's HTML Sanitizer 的东西或者尽管它已经有一段时间没有更新了,Antisamy。这由实际的 HTML 解析器支持,并允许您指定合法标签,然后为其中的合法内容指定正则表达式。
另请注意,在您担心 HTML 卫生之前,确保您的应用程序已成功实现输出转义对您来说远更为重要。如果对每个上下文都正确转义,则可以完全忽略 XSS 验证。 (反之则不然。)
关于c# - 使用正则表达式防止 XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421796/