首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

ASP 防止 SQL 注入攻擊:InStr 函數過濾危險字元實務

     編輯:關於SqlServer

InStr 函數語法

InStr([start, ]string1, string2[, compare])
  • start:搜尋起始位置(預設 1),若指定 compare 則必填。
  • string1:被搜尋字串。
  • string2:要尋找的字串。
  • compare:vbBinaryCompare (0) 二進位比較(預設),vbTextCompare (1) 文字比較。

回傳:找到 → 位置(1-based);未找到 → 0;string1 為空/Null → 0/Null。

基本防禦範例

If InStr(Request("id"), " ") > 0 Or InStr(Request("id"), "'") > 0 Then
    Response.Redirect "index.asp"
End If

邏輯:偵測輸入參數 id 是否包含空格或單引號,發現則導向首頁阻擋攻擊。

為何空格檢查能擋住 AND 1=1?

典型注入 payload:id=90 AND 1=1 必含空格。
InStr(Request("id"), " ") 偵測到空格即攔截,使 AND 1=1、OR 'a'='a 等依賴空格分隔的注入失效。

進階:擴充黑名單字元

Dim badChars : badChars = Array(" ", "'", ";", ",", "--", "/*", "*/", "xp_", "sp_")
Dim i, inputVal : inputVal = Request("id")
For i = 0 To UBound(badChars)
    If InStr(inputVal, badChars(i)) > 0 Then
        Response.Redirect "index.asp"
    End If
Next

陣列化管理危險字串,易維護擴充。

局限性與最佳實務

  • ⚠️ 黑名單永遠不完整,繞過手法層出不窮(編碼、大小寫、註解變形)。
  • ✅ 根本解法:參數化查詢(Command 物件 Parameters 集合、預存程序參數)。
  • ✅ 最小權限原則:Web 連線帳號僅授予必要物件權限。
  • ✅ 輸入驗證:型別、長度、格式、白名單驗證。
  • ✅ 錯誤訊息不回傳前端,避免資訊洩露。

結論

InStr 過濾可作為第一道防線或舊系統快速修補,但絕不能當作唯一防護。新專案務必採用參數化查詢從根源杜絕 SQL 注入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved