[英]Oracle: correct way to prevent SQL Injection when using parameters is not possible
[英]Prevent sql injection by removing characters and other possible ways
如果刪除sql查詢變量中的'
”字符,則可以避免SQL注入。 我使用的SQL查詢是:
dbCommand = new OleDbCommand("update Table1 set PhoneNo = '" + phone + "' where Table1.Company = '" + company + "'", dbConnection);
dbCommand.ExecuteNonQuery();
我也以類似的方式使用SELECT sql查詢:
dbReader = new OleDbCommand("select * from Table1 where Table1.Company = '" + company + "'", dbConnection).ExecuteReader();
dbReader.Read();
if (dbReader.HasRows)
{
//Do operations using dbReader["Company"]
}
變量中是否還有其他字符可能導致SQL注入或其他風險? 我可以刪除那些。 有什么其他方法可以防止SQL注入或其他風險?
最好的方法就是簡單地使用參數化查詢,而不要嘗試刪除任何'
。 一個例子是這樣的:
dbCommand = new OleDbCommand("update Table1 set PhoneNo = ? where Table1.Company =? ", dbConnection);
dbCommand.Parameters.Add(phone);
dbCommand.Parameters.Add(company);
根據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);
更新(史蒂夫的評論)
您可以為參數使用名稱,但是OleDb會忽略它。 如果更改添加參數的順序,查詢將不起作用– Steve
嘗試將其更改為此
dbCommand = new OleDbCommand("update Table1 set PhoneNo = @PhoneNo where Table1.Company = @company ", dbConnection);
dbCommand.Parameters.Add("@PhoneNo", phone );
dbCommand.Parameters.Add("@company", company );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.