Com*_*ser 0 c# sql database sql-injection
如果我'在sql查询的变量中删除" "字符,则可以避免SQL注入.我使用的SQL查询是:
dbCommand = new OleDbCommand("update Table1 set PhoneNo = '" + phone + "' where Table1.Company = '" + company + "'", dbConnection);
dbCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
我也以类似的方式使用SELECT sql查询:
dbReader = new OleDbCommand("select * from Table1 where Table1.Company = '" + company + "'", dbConnection).ExecuteReader();
dbReader.Read();
if (dbReader.HasRows)
{
//Do operations using dbReader["Company"]
}
Run Code Online (Sandbox Code Playgroud)
变量中是否还有其他可能导致SQL注入或其他风险的字符?我可以删除那些.有什么其他方法可以防止SQL注入或其他风险?
最好的方法是使用参数化查询,不要尝试删除任何'.一个例子是:
dbCommand = new OleDbCommand("update Table1 set PhoneNo = ? where Table1.Company =? ", dbConnection);
dbCommand.Parameters.Add(phone);
dbCommand.Parameters.Add(company);
Run Code Online (Sandbox Code Playgroud)
根据MSDN,OleDbCommand类还允许您按名称指定参数.
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparametercollection.aspx
所以你可以用?我的实例中的实际参数名替换那些:
dbCommand = new OleDbCommand("update Table1 set PhoneNo = @phone where Table1.Company =@company ", dbConnection);
dbCommand.Parameters.Add("@phone",phone);
dbCommand.Parameters.Add("@company",company);
Run Code Online (Sandbox Code Playgroud)
更新(史蒂夫评论)
您可以使用参数的名称,但OleDb会忽略它.如果更改添加参数的顺序,则查询不起作用 - Steve