iT邦幫忙

4

FAQ -- ADO.NET的參數寫法,避免資料隱碼(SQL Injection)攻擊

FAQ -- ADO.NET的參數寫法,避免資料隱碼(SQL Injection)攻擊

底下的文章,我整理了 DataReader 與DataSet (DataTable)兩種寫法
希望對您有幫助
String SQLString = "Select * From test Where id = @id ";
// 注意到沒?連「單引號」都不可以出現

SqlDataReader & SqlCommand --
簡易寫法。 cmd.Parameters.AddWithValue("@參數名稱", 輸入的數值);

DataSet / DataTable & SqlDataAdapter --
合併在一起寫
myAdapter.SelectCommand.Parameters.AddWithValue("@id", TextBox1.Text);

.AddWithValue()方法,請看 msdn網站 。
他的範例就介紹了我上面的兩種作法,請擇一使用
http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.110).aspx

如果您使用 OleDb或是 Odbc,請把參數寫成「?」符號 (後面不可以帶上參數名稱喔!只有一個 ?符號而已)
請參閱 http://msdn.microsoft.com/zh-tw/library/zxdcah9t(v=vs.110).aspx

詳見全文:ADO.NET 參數寫法 Parameter(避免SQL Injection資料隱碼攻擊)
http://www.dotblogs.com.tw/mis2000lab/archive/2014/08/29/ado.net\_parameter\_sql\_injection\_20140829.aspx


2 則留言

0
mis2000lab
iT邦好手 1 級 ‧ 2015-02-12 09:03:10

關於「參數」,我寫了一系列的範例
希望對您有幫助

http://www.dotblogs.com.tw/mis2000lab/Tags/%E5%8F%83%E6%95%B8/default.aspx

0
summertw
iT邦好手 1 級 ‧ 2015-02-19 22:56:04

這一篇真的能【避免】資料隱碼(SQL Injection)攻擊嗎??
問題應該不是出在問號(?)才對,而是SPT寫法。
隱碼攻擊的實際致命傷是在SPT寫法所造成。
而隱碼攻擊最大的隱優是實際的資料回饋到前端被無限量的取出而造成伺服器無法負荷而出現類當機的系統嚴重延遲現像...
從這兩個角度去想,才能真正的解決此一問題..
目前利用PHP、C#產生的server端Web Services都已針對此一問題修正了他們的判斷機制,所以,開發端只剩下對SPT寫法要去真正的了解它的弱點在哪裡,這樣才能真正的【避免】資料隱碼(SQL Injection)攻擊...
以上個人淺見,也希望提供各位作參考..
但願,台鐵的當機事件不要再發生(幫台鐵寫訂票系統的工程師們,認真一點吧~~)...

我要留言

立即登入留言