[討論] 大家對SQL injection的有效防制方法怎麼做呢?

看板C_Sharp (C#)作者 (叮噹)時間20年前 (2005/04/03 11:58), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
若是要將讓程式去接觸到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)
文章代碼(AID): #12JsdM0d (C_Sharp)
文章代碼(AID): #12JsdM0d (C_Sharp)