再次问题: 我们是否真的需要将数字类型变量值作为参数传递以防止sql注入。
我有两个带参数的样本函数,然后没有使用参数
function CheckThis(int UIN)
{
var connect = ConfigurationManager.ConnectionStrings["NorthWind"].ToString();
var query = "Select * From Products Where ProductID = @ProductID";
using (var conn = new SqlConnection(connect))
{
using (var cmd = new SqlCommand(query, conn))
{
cmd.Parameters.Add("@ProductID", SqlDbType.Int);
cmd.Parameters["@ProductID"].Value = UIN;
conn.Open();
//Process results
}
}
}
OR正在关注
function CheckThis(int UIN)
{
var connect = ConfigurationManager.ConnectionStrings["NorthWind"].ToString();
var query = "Select * From Products Where ProductID = " + UIN;
using (var conn = new SqlConnection(connect))
{
using (var cmd = new SqlCommand(query, conn))
{
//cmd.Parameters.Add("@ProductID", SqlDbType.Int);
//cmd.Parameters["@ProductID"].Value = UIN;
conn.Open();
//Process results
}
}
}
答案 0 :(得分:3)
您无需停止SQL注入攻击 1 。但是:
int
更改为其他类型,则然后将面临注入攻击的风险,并且完全有可能在代码审核中错过< / LI>
简而言之,我肯定会使用参数。
1 除非您的攻击者也会影响您的区域设置。那时,even string concatenation with integers can be vulnerable to SQL injection attacks。