如何使用C#来清理html页面上的输入?

时间:2008-10-09 19:41:05

标签: c# html-sanitizing antixsslibrary

是否有用于清理html页面输入的库或可接受的方法?

在这种情况下,我的表单只包含姓名,电话号码和电子邮件地址。

代码必须是C#。

例如:

"<script src='bobs.js'>John Doe</script>"应该成为"John Doe"

6 个答案:

答案 0 :(得分:23)

这是一个较旧但仍然相关的问题。

我们正在使用HtmlSanitizer .Net库,其中包含:

同样在NuGet

答案 1 :(得分:9)

根据您对此答案所做的评论,您可能会在此问题中找到一些有用的信息:
https://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site

这是一个参数化查询示例。而不是:

string sql = "UPDATE UserRecord SET FirstName='" + txtFirstName.Text + "' WHERE UserID=" + UserID;

这样做:

SqlCommand cmd = new SqlCommand("UPDATE UserRecord SET FirstName= @FirstName WHERE UserID= @UserID");
cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 50).Value = txtFirstName.Text;
cmd.Parameters.Add("@UserID", SqlDbType.Integer).Value = UserID;

编辑:由于没有注射,我删除了处理该问题的部分答案。我离开了基本的参数化查询示例,因为这对于阅读问题的其他人来说仍然有用   --Joel

答案 2 :(得分:8)

如果通过清理你的意思是完全删除标签,那么Bryant引用的RegEx示例就是你想要的解决方案类型。

如果您只是想确保代码不会弄乱您的设计并呈现给用户。您可以使用HttpUtility.HtmlEncode方法来防止这种情况!

答案 3 :(得分:7)

答案 4 :(得分:4)

听起来您有用户提交内容但您无法完全信任它们,但您仍然希望将其提供的内容呈现为超级安全的HTML。以下是三种技术:HTML编码所有内容,HTML编码和/或仅删除邪恶部分,或使用编译为您熟悉的HTML的DSL。

  1. 它应该成为“John Doe”吗?我会HTML encode那个字符串,并让用户“John Doe”(如果确实这是他的真名......),有一个看起来很愚蠢的名字<script src='bobs.js'>John Doe</script>。他不应该首先在脚本标签或任何标签中包装他的名字。这是我在所有情况下使用的方法,除非其他技术之一有非常好的商业案例。

  2. 接受来自用户的HTML,然后使用像sanitization method @Bryant提到的白名单方法对其进行清理(在输出中)。做到这一点是非常困难的,我推迟到更大的思想。请注意,一些消毒剂将HTML编码邪恶,其他人将完全删除有问题的位。

  3. 另一种方法是使用“编译”到HTML的DSL。确保whitehat你的DSL编译器,因为一些(如MarkdownSharp)将允许任意HTML,如<script>标签和邪恶属性通过未编码(顺便说一句是完全合理但可能不是什么需要或期望)。如果是这种情况,您将需要使用技术#2并清理编译器输出的内容。

  4. 结束思路:

答案 5 :(得分:-5)

您正在寻找RegEx类以及类似<(.|\n)*?>的模式。

您可find lot examles google {/ 3}}。