我如何检查任何html<;脚本>;C#中的标签,再加上其他任何讨厌的东西

本文关键字:任何 标签 讨厌 其他 脚本 何检查 检查 gt lt html | 更新日期: 2023-09-27 18:00:39

允许用户在文本框中格式化他们的html。然后将其发送到后端进行验证。其他用户可能会看到此文本框。

我想检查后端是否有任何标签。我知道这可以用一个相对简单的正则表达式来完成。我只想做一些类似<'s*?script's*?> 的事情

不过,我的问题是,如果有人做了这样的事情:

<a href="http://example.com" onClick="alert(1);">test</a>

这将通过验证。我也可以让正则表达式检查onClick,但我相信还有其他方法可以解决这个问题。

我的问题是:有什么好方法可以做到这一点吗?我是不是只能依靠正则表达式和我自己的研究来弄清楚它们还能如何运行脚本?

编辑

我想我可以创建一个他们可以输入的白名单。它主要用于格式化文本,因此<b>, <i>, <h>等。不过,这可能是一个可接受的解决方案,也可能不是,我需要看看实际的用例是什么。我希望有不同的解决方案。

我如何检查任何html<;脚本>;C#中的标签,再加上其他任何讨厌的东西

实际上,您应该使用白名单验证(即只允许您知道安全的特定示例),而不是试图检测和删除潜在的危险输入。

一个非常好的方法是使用Markdown,而不仅仅是允许HTML输入。

有关于HTML注入的OWASP指南。

从内容中删除所有HTML标记的简单方法

public string Strip(string text)
{
    return Regex.Replace(text, @”<(.|'n)*?>”, string.Empty);
}