【问题标题】:Preventing XSS using Regex使用正则表达式防止 XSS
【发布时间】:2016-02-16 00:52:02
【问题描述】:

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

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

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

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

使用降价编辑器会更好,还是因为它们也允许标记而仍然存在类似问题?

或者我应该手动解析我想要的标签并让他们放什么?

【问题讨论】:

标签: c# html regex markdown xss


【解决方案1】:

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

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

另外请注意,在您担心 HTML 卫生问题之前,确保您的应用程序已成功实现输出转义对您而言要重要得多。如果您为每个上下文正确转义,您可以完全忽略 XSS 验证。 (反之亦然。)

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多