在SQL injection方面, 我完全理解参数化 string
参数的必要性;这是书中最古老的技巧之一。但是什么时候可以不参数化SqlCommand
?是否有任何数据类型被认为是不参数化的“安全”数据类型?
例如:我不认为自己接近是 SQL 专家,但我想不出任何可能容易受到 SQL 注入(inject)攻击的情况来接受 bool
或 int
并将其直接连接到查询中。
我的假设是否正确,或者这是否可能在我的程序中留下巨大的安全漏洞?
为了澄清,这个问题被标记为 c#这是一种强类型语言;当我说“参数”时,想想类似 public int Query(int id)
。
最佳答案
我认为这是安全的...技术上,但养成这种习惯是很糟糕的。您真的要编写这样的查询吗?
var sqlCommand = new SqlCommand("SELECT * FROM People WHERE IsAlive = " + isAlive +
" AND FirstName = @firstName");
sqlCommand.Parameters.AddWithValue("firstName", "Rob");
在类型从整数变为字符串的情况下,它也会使您容易受到攻击(想想员工编号,尽管它的名字可能包含字母)。
因此,我们将 EmployeeNumber 的类型从 int
更改为 string
,但忘记更新我们的 sql 查询。哎呀。
关于c# - 当参数不是字符串时,不参数化 SQL 查询是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32642706/