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