防御T-SQL注入
本文关键字:注入 T-SQL 防御 | 更新日期: 2023-09-27 18:10:50
如果这看起来是一个愚蠢的问题,那么很抱歉,但是使用参数如何防御SQL注入以及与T-SQL相关的最佳实践是什么:
例如:这是最佳实践吗?
SqlCommand SqlCmd = new SqlCommand("SQL Command @X ....... @Y");
SqlCmd.CommandType = CommandType.Text;
SqlCmd.Parameters.AddWithValue("@X", SqlDbType.VarChar).Value = X;
SqlCmd.Parameters.AddWithValue("@Y", SqlDbType.date).Value = Y;
SqlCmd.Connection = ConnectionString;
是的,这段代码是安全的,不会被SQL注入。
原因是当你使用参数时,你把项目作为一个值传递给你的服务器,它们将被这样解释。
如果你要构造一个字符串,SQL不能知道值是什么,查询是什么,必须完全依赖于语法。
最佳实践是使用SQL参数。使用SqlParameterCollection(如您的示例:SqlCmd.Parameters
)自动为您提供:
- 类型检查 <
- 长度验证/gh>
- 输入被视为文字值而不是可执行代码
- 处理通常涉及SQL注入攻击的特殊字符
还有一些其他的最佳实践,包括:
- 约束和清理输入数据
- 使用在数据库中具有受限权限的帐户
- 避免披露数据库错误信息
您可以在此OWASP SQL注入预防备查单中找到进一步描述的最佳实践。