簡體   English   中英

通過刪除字符和其他可能的方式來防止SQL注入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM