是否有任何经过彻底测试的 .NET 库来清理来自脚本/sql 注入之类的输入?
5 回答
我喜欢使用Microsoft AntiXSS 库。它是免费的,而且很容易使用。
对于 SQL 注入,我总是使用参数。同样,它们易于使用,我不喜欢尝试转义特殊字符。如果你问我,这是灾难的秘诀。
SQL 注入和跨站点脚本(又名 XSS 或脚本注入)是不同的问题。
1) SQL 注入非常简单,始终使用参数化查询 (SQLParameter),并且非常努力地永远不要在 T-SQL 存储过程中执行 sp_exec @query。.Net 参数化查询不会防止这种二阶注入。
2) XSS 更难以普遍缓解,因为有很多地方可以将 JavaScript 插入 HTML 文档。使用 AntiXSS 对用户数据进行编码的建议是正确的。在将用户数据插入输出文档之前使用此库。不幸的是,如果您使用 ASP.Net 服务器控件对所有数据进行编码,可能会导致双重编码和显示伪影。发生这种情况是因为某些控件属性对数据进行编码,而另一些则没有。请参阅此表以找出默认编码的属性。在分配给任何不编码的属性之前使用 Anti-XSS。
使用参数化命令,而不是尝试清理字符串,以防止 SQL 注入。
AntiXSS可用于防止 XSS 攻击。
如果您使用的是 ASP.NET 4.5,您现在可以使用框架中附带的 AntiXSS 功能。
这些是已合并到 ASP.NET 4.5 中的外部 AntiXSS 库的部分:
HtmlEncode
,HtmlFormUrlEncode
, 和HtmlAttributeEncode
XmlAttributeEncode
和XmlEncode
UrlEncode
和UrlPathEncode
(新)CssEncode