iT邦幫忙

DAY 7
3

我的.Net之路系列 第 7

使用參數化查詢

在ADO.NET中使用正確的方法加入條件參數
這個問題常常被提起,如果你常爬文或是閱讀程式設計相關書籍,應該偶爾會看到某些程式碼內的SQL查詢字串是寫成以下這樣:
SQLStr="Select * From myTable Where myNo= '" & Textbox1.Text & "'"
這樣使用組字串的方式產生SQL查詢字串的方式其實已經滿久了,但是這種寫法要承擔SQL Injection(SQL 插入攻擊)的風險,如果某個使用者在TextBox1中輸入了正確的SQL陳述式就有可能對資料庫或資料表造成傷害。不蓋你,有些電腦書籍中的範例就是採用這種具有危險性的寫法,最慘的是出現這類範例的書多半是給初學者看的入門書,而且並未加註適當的說明與警告,個人認為這種範例應該要像菸酒類產品一樣加註「使用組字串方式產生SQL查詢字串會導致SQL插入式攻擊」的警語。
在ADO.NET中正確使用條件查詢的方式應該是採用參數化查詢,比如上面的例子我們可以改成:
Dim SQLStr as string ="Select * From myTable Where myNo = @myNo "
Dim myConn as New Sqlconnection(連線字串)
Dim myCmd as New SqlCommand(SQLStr, myConn)
myCmd.Parameters.AddWithValue("@myNo", Trim(TextBox1.Text))
這樣的做法會比較妥善,事實上我也認為這樣比較容易閱讀與除錯。
在MSDN中關於這個說明位於 http://msdn.microsoft.com/zh-tw/library/hdb58b2f%28VS.80%29.aspx.NET Framework 開發人員手冊 ADO.NET 安全程式碼撰寫方針一節的說明中,大家可以參考看看。


上一篇
NullReferenceException
下一篇
型別
系列文
我的.Net之路31

1 則留言

我要留言

立即登入留言