45

是否有一个库或可接受的方法来清理 html 页面的输入?

在这种情况下,我有一个只有姓名、电话号码和电子邮件地址的表格。

代码必须是 C#。

例如:

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

4

5 回答 5

57

我们正在使用HtmlSanitizer .Net 库,它:

同样在NuGet上

于 2016-10-03T18:56:54.950 回答
10

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

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

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;

编辑:由于没有注入,我删除了处理该问题的答案部分。我留下了基本的参数化查询示例,因为这可能对其他阅读该问题的人仍然有用。
——乔尔

于 2008-10-09T20:05:37.860 回答
8

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

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

于 2008-10-09T20:03:11.640 回答
7

使用Microsoft Anti-Cross Site Scripting Library怎么样?

于 2009-11-10T12:53:18.763 回答
7

听起来您有用户提交内容,但您不能完全信任他们,但您仍然希望将他们提供的内容呈现为超级安全的 HTML。这里有三种技术:HTML 对所有内容进行编码,HTML 编码和/或仅删除有害部分,或者使用编译为您熟悉的 HTML 的 DSL。

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

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

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

结束思想:

于 2013-10-04T18:16:59.273 回答