使用正则表达式防止XSS

时间:2016-02-16 00:52:02

标签: c# html regex markdown xss

我正在使用一些正则表达式来清理文本中的标签

static string Pattern = "<(?:[^>=]|='[^']*'|=\"[^\"]*\"|=[^'\"][^\\s>]*)*>";

static public string StripHtml(string Value)
{
    return Regex.Replace(Value, Pattern, string.Empty);
}

虽然这看起来很安全,但我想知道它是不是真的存在?有没有办法在不使用标签的情况下执行XSS?

使用降价编辑器会更好吗,还是会有类似的问题,因为它们也允许标记?

或者我应该手动解析我想要的标签并允许它们放置什么?

2 个答案:

答案 0 :(得分:1)

您可以使用ESAPI,它可以帮助您防止XSS以及其他安全漏洞。已经有一些验证,并且还为此定义了正则表达式。但是如果你想要自定义正则表达式,那么你必须明确地定义它。

答案 1 :(得分:1)

您没有指定您正在使用的ESAPI语言,但如果您需要在应用程序中接受HTML,则正则表达式是100%错误解决方案。这是因为HTML is a context free language和正则表达式无法解析它。

你想要像OWASP's HTML Sanitizer这样的东西,或者虽然它已经有一段时间没有更新,但是Antisamy。这由实际的HTML解析器支持,并允许您指定合法标签,然后为其中的合法内容指定正则表达式。

另请注意,在您担心HTML卫生问题之前,确保您的应用程序已成功实现输出转义非常重要 更重要。如果为每个上下文正确转义,则可以完全忽略XSS验证。 (反过来,不是这样。)