【发布时间】:2009-10-22 16:47:14
【问题描述】:
如果我要从表中选择一行,我基本上有两个选择,要么像这样
int key = some_number_derived_from_a_dropdown_or_whatever
SqlCommand cmd = new SqlCommand("select * from table where primary_key = " + key.ToString());
或使用参数
SqlCommand cmd = new SqlCommand("select * from table where primary_key = @pk");
SqlParameter param = new SqlParameter();
param.ParameterName = "@pk";
param.Value = some_number_derived_from_a_dropdown_or_whatever;
cmd.Parameters.Add(param);
现在,我知道第一种方法由于可能的 sql 注入攻击而被反对,但在这种情况下,参数是一个整数,因此实际上应该不可能注入恶意代码。
我的问题是:您是否在生产代码中使用选项 1,因为您认为使用安全是因为易于使用和对插入参数的控制(如上所示,或者如果参数是在代码中创建的)?或者无论如何你总是使用参数?参数 100% 注射安全吗?
【问题讨论】:
标签: c# sql-server security sql-injection