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

ASP 經典防 SQL 注入通用程式碼實作

     編輯:關於SqlServer

ASP 經典環境下的 SQL 注入防禦完整實作

針對傳統 ASP (Classic ASP) 應用程式,提供一個可直接部署的通用防注入模組。透過攔截查詢字串與表單參數,檢測高風險關鍵字,實現輕量級防護。

核心防護邏輯

  • 攔截範圍:QueryString 及 Request 集合所有參數
  • 檢測特徵:單引號、SQL 關鍵字 (AND、SELECT、UPDATE、INSERT、DELETE、CHR、MID、MASTER.) 及分號
  • 處理模式:三種可配置回應方式(彈窗警告、導向錯誤頁、警告後導向)

完整程式碼 (VBScript)

<%
Dim Fy_Url, Fy_a, Fy_x, Fy_Cs(), Fy_Cl, Fy_Ts, Fy_Zx
'--- 設定區塊 開始 ---
Fy_Cl = 1          ' 1=彈窗提示, 2=導向頁面, 3=提示後導向
Fy_Zx = "Error.ASP" ' 錯誤導向目標頁面
'--- 設定區塊 結束 ---

On Error Resume Next
Fy_Url = Request.ServerVariables("QUERY_STRING")
Fy_a = Split(Fy_Url, "&")
ReDim Fy_Cs(UBound(Fy_a))
On Error Resume Next

For Fy_x = 0 To UBound(Fy_a)
    Fy_Cs(Fy_x) = Left(Fy_a(Fy_x), InStr(Fy_a(Fy_x), "=") - 1)
Next

For Fy_x = 0 To UBound(Fy_Cs)
    If Fy_Cs(Fy_x) <> "" Then
        If InStr(LCase(Request(Fy_Cs(Fy_x))), "'") <> 0 Or _
           InStr(LCase(Request(Fy_Cs(Fy_x))), "and") <> 0 Or _
           InStr(LCase(Request(Fy_Cs(Fy_x))), "select") <> 0 Or _
           InStr(LCase(Request(Fy_Cs(Fy_x))), "update") <> 0 Or _
           InStr(LCase(Request(Fy_Cs(Fy_x))), "chr") <> 0 Or _
           InStr(LCase(Request(Fy_Cs(Fy_x))), "delete%20from") <> 0 Or _
           InStr(LCase(Request(Fy_Cs(Fy_x))), ";") <> 0 Or _
           InStr(LCase(Request(Fy_Cs(Fy_x))), "insert") <> 0 Or _
           InStr(LCase(Request(Fy_Cs(Fy_x))), "mid") <> 0 Or _
           InStr(LCase(Request(Fy_Cs(Fy_x))), "master.") <> 0 Then

            Select Case Fy_Cl
                Case "1"
                    Response.Write "<Script Language=JavaScript>alert(' 出現錯誤!參數 " & Fy_Cs(Fy_x) & " 的值中包含非法字符串! 請不要在參數中出現:;,and,select,update,insert,delete,chr 等非法字符! SQL通用防注入V1.0 ASP版 -- :;window.close();');window.close();</Script>"
                Case "2"
                    Response.Write "<Script Language=JavaScript>location.href='" & Fy_Zx & "'</Script>"
                Case "3"
                    Response.Write "<Script Language=JavaScript>alert(' 出現錯誤!參數 " & Fy_Cs(Fy_x) & "的值中包含非法字符串! 請不要在參數中出現:;,and,select,update,insert,delete,chr 等非法字符! SQL通用防注入V1.0 ASP版 -- ');location.href='" & Fy_Zx & "';</Script>"
            End Select
            Response.End
        End If
    End If
Next
%>

部署與注意事項

  1. 將此程式碼置於需防護頁面最頂端 (含 <html> 標籤之前)
  2. 依應用需求調整 Fy_Cl 模式與 Fy_Zx 導向頁
  3. 重要:此為關鍵字黑名單機制,存在誤攔 (如合法輸入含 "update") 與繞過風險 (編碼、註解混淆)。生產環境強烈建議改用參數化查詢 (Command.Parameters) 為主防,此腳本僅作為第二道防線或舊系統快速修補。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved