Not*_*tMe 36 c# html-sanitizing antixsslibrary
是否有库或可接受的方法来清理html页面的输入?
在这种情况下,我有一个只有姓名,电话号码和电子邮件地址的表单.
代码必须是C#.
例如:
"<script src='bobs.js'>John Doe</script>" 应该成为 "John Doe"
Jul*_*ian 32
这是一个较旧但仍然相关的问题.
我们正在使用HtmlSanitizer .Net库,其中:
也在NuGet上
根据您对此答案的评论,您可能会在此问题中找到一些有用的信息: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;
Run Code Online (Sandbox Code Playgroud)
做这个:
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;
Run Code Online (Sandbox Code Playgroud)
编辑:由于没有注入,我删除了处理该问题的部分答案.我离开了基本的参数化查询示例,因为这对于阅读问题的其他人来说可能仍然有用.
--Joel
如果通过清理你的意思是完全删除标签,那么Bryant引用的RegEx示例就是你想要的解决方案类型.
如果您只是想确保代码不会弄乱您的设计并呈现给用户.您可以使用HttpUtility.HtmlEncode方法来防止这种情况!
听起来您有提交内容的用户,但您不能完全信任他们,但您仍然希望将他们提供的内容呈现为超级安全的 HTML。以下是三种技术:HTML 编码所有内容、HTML 编码和/或仅删除有害部分,或使用可编译为您熟悉的 HTML 的 DSL。
它应该变成“John Doe”吗?我会对该字符串进行 HTML 编码,并让用户“John Doe”(如果这确实是他的真名...)拥有看起来很愚蠢的 name <script src='bobs.js'>John Doe</script>。他一开始就不应该用脚本标签或任何标签包裹他的名字。这是我在所有情况下都使用的方法,除非对于其他技术之一有非常好的商业案例。
接受来自用户的 HTML,然后使用白名单方法(如@Bryant 提到的清理方法)对其进行清理(在输出时)。正确地做到这一点(非常)困难,我推迟将其付诸于更大的头脑。请注意,某些消毒剂会将 HTML 编码为邪恶,而其他消毒剂会完全删除违规位。
另一种方法是使用“编译”为 HTML 的 DSL。确保你的 DSL 编译器白帽,因为有些(如MarkdownSharp)将允许<script>通过未编码的任意 HTML标签和邪恶属性(顺便说一句,这是完全合理的,但可能不是你需要或期望的)。如果是这种情况,您将需要使用技术 #2 并清理编译器输出的内容。
结语:
| 归档时间: |
|
| 查看次数: |
33366 次 |
| 最近记录: |