如何检查C#中的任何html <script>标签,以及其他任何令人讨厌的东西?</script>

时间:2013-02-22 15:05:39

标签: c# html regex

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

我想检查后端的任何标签。我知道这可以通过一个相对简单的正则表达式来完成。我会做<\s*?script\s*?>

之类的事情

我的问题是,如果某人做了类似的事情:

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

这会通过验证。我还可以对onClick进行正则表达式检查,但我确信还有其他方法可以解决这个问题。

我的问题:这有什么好办法吗?我是否只需依靠正则表达式和我自己的研究来弄清楚他们如何运行脚本?

修改

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

2 个答案:

答案 0 :(得分:4)

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

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

OWASP Guidelines for HTML injection

答案 1 :(得分:-1)

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

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