作者sunflier (叮当)
看板C_Sharp
标题[讨论] 大家对SQL injection的有效防制方法怎麽做呢?
时间Sun Apr 3 12:08:41 2005
若是要将让程式去接触到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)