c# - 使用正则表达式防止 XSS

标签 c# html regex markdown xss

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

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/

相关文章:

c# - 在 xaml 中引用无命名空间类

c# - 防止 Entity Framework 将外键设置为 NULL

html - 如何让边框半径和渐变背景在 IE 9 中协同工作

javascript - 正则表达式在按键时无法正常工作

c# - 从方法返回数据读取器

html - 垂直对齐 html 元素

Javascript,jQuery : Change a certain word of a div into a <span> with a function

python - 使用 Pandas 从字符串中删除所有字母数字单词

c++ - 有效文件夹名称的正则表达式 c++ (windows)

c# - 我可以从 C++ 或 C# 程序中提取 MSI 包的内容吗?