[討論] 大家對SQL injection的有效防制方法怎麼做呢?
若是要將讓程式去接觸到sql server的時候,總免不了
會要考慮到sql injection的問題。
目前我有兩個困惑的地方:
一、用Store Procedure,一次解決。
但這方式卻讓programmer很頭大,在.net裡面要specify每個
欄位,並且連欄位的type、大小都要指定好,若是有個sql command
要動到三、四十個欄位,不就瘋掉了!?
而且這種方式只能用在MSSQL,若是把資料庫換成access或是其他
要用到oledb、oracle,而不是sql的時候,不就...
二、用SQL string,把有問題的string濾掉。
Dim badChars() As String = {"select", "delete", "insert", "drop",
"exec", "create", "union", "declare", "shutdown", "truncate", ";", "--",
"xp_"}
Dim i As Integer
For i = 0 To UBound(badChars)
If InStr(sqlStr, badChars(i), CompareMethod.Text) <> 0 Then
Throw New System.Exception("偵測到SQL Injection!!! 不合法
字串:『" + badChars(i) + "』")
Return ""
End If
Next
' 將單引號變雙引號
sqlStr = Replace(sqlStr, "'", "''")
這種方式又造成更多問題,若是使用者必須輸入badChars裡面的字串,
而且又有需要輸入"'"c這種字元,那...
所以想請教各位先進,該如何防制、避免sql injection?
在實務上,有什麼簡易、有效的方法?
謝謝各位了!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.68.10.222
※ 編輯: sunflier 來自: 219.68.10.222 (04/03 12:09)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章