先過濾,再拼接。在組合 SQL 字串前,檢查使用者輸入並移除/轉義敏感字元,比事後過濾完整 SQL 更安全、負擔更小。
' > < = ! - + * / ( ) | 空白
Function SanitizeSQL(ByVal input)
Dim badChars, i, ch
badChars = Array("'", ">", "<", "=", "!", "-", "+", "*", "/", "(", ")", "|", " ")
For i = 0 To UBound(badChars)
input = Replace(input, badChars(i), "", 1, -1, vbTextCompare)
Next
SanitizeSQL = input
End Function
' 使用方式
Dim safeInput
safeInput = SanitizeSQL(Request.Form("username"))
sql = "SELECT * FROM Users WHERE Name = '" & safeInput & "'"
Command.Parameters、.NET SqlParameter、Java PreparedStatement,徹底分離程式碼與資料SELECT/INSERT/UPDATE/DELETE