sql注入防禦
A. 怎樣利用instr()函數防止SQL注入攻擊
學asp一段時間,面臨SQL注入攻擊問題,需利用instr()函數預防。instr()函數用於查找字元串中特定字元或字元串首次出現的位置。具體代碼如下:
If instr(Request("id")," ")>0 or instr(Request("id"),"'")>0 then response.redirect "index.asp"
instr()函數語法如下:
InStr([start, ]string1, string2[, compare])
該函數參數包括:
- start:可選,設置搜索開始位置,默認從第一個字元開始。若為Null,將出現錯誤。必須有compare參數時提供。
- string1:必選,搜索的字元串表達式。
- string2:必選,要搜索的字元串表達式。
- compare:可選,指示比較類型,默認為二進制比較。值為:
- vbBinaryCompare:0,執行二進制比較。
- vbTextCompare:1,執行文本比較。
instr()函數返回值如下:
- 返回字元串在另一個字元串中首次出現的位置。
- 若未找到匹配字元串,返回0。
- 若參數為Null,返回Null。
示例使用instr()查找字元串:
Dim SearchString, SearchChar, MyPos
SearchString = "XXpXXpXXPXXP" '要搜索的字元串
SearchChar = "P" '搜索字元
MyPos = instr(4, SearchString, SearchChar, 1) '文本比較從第四個字元開始,返回6
MyPos = instr(1, SearchString, SearchChar, 0) '二進制比較從第一個字元開始,返回9
MyPos = instr(SearchString, SearchChar) '默認二進制比較,返回9
MyPos = instr(1, SearchString, "W") '二進制比較從第一個字元開始,返回0(未找到)
instr()函數主要用於檢查用戶輸入中是否包含特定字元或字元串,如空格、單引號等。若instr(Request("id")," ")>0或instr(Request("id"),"'")>0,則可能遭受SQL注入攻擊。通過在代碼中添加instr()函數,可以有效防止攻擊。
例如:
If instr(Request("id")," ")>0 or instr(Request("id"),"'")>0 then response.redirect "index.asp"
這段代碼檢查了用戶輸入中是否包含空格或單引號,若存在,則直接重定向到"index.asp",避免SQL注入攻擊。這種方法簡單有效,無需在檢查列表中添加所有可能的攻擊字元。只需確保檢查了關鍵字元,如空格、單引號、分號等,即可有效防禦SQL注入。
總結:利用instr()函數,根據輸入字元串中特定字元的出現情況,可以有效防止SQL注入攻擊。通過簡單檢查空格和單引號的出現,即可實現基本的安全防禦。這種方法適用於預防基礎的SQL注入嘗試,確保代碼安全運行。