針對 ASP 程式 SQL 注入漏洞,綜合改良網上方案,提供 SafeRequest 函數替換原生 Request,攔截高危關鍵字。
Function SafeRequest(ParaName)
Dim ParaValue
ParaValue = Request(ParaName)
If IsNumeric(ParaValue) = True Then
SafeRequest = ParaValue
Exit Function
ElseIf InStr(LCase(ParaValue), "select ") > 0 Or _
InStr(LCase(ParaValue), "insert ") > 0 Or _
InStr(LCase(ParaValue), "delete from") > 0 Or _
InStr(LCase(ParaValue), "count(") > 0 Or _
InStr(LCase(ParaValue), "drop table") > 0 Or _
InStr(LCase(ParaValue), "update ") > 0 Or _
InStr(LCase(ParaValue), "truncate ") > 0 Or _
InStr(LCase(ParaValue), "asc(") > 0 Or _
InStr(LCase(ParaValue), "mid(") > 0 Or _
InStr(LCase(ParaValue), "char(") > 0 Or _
InStr(LCase(ParaValue), "xp_cmdshell") > 0 Or _
InStr(LCase(ParaValue), "exec master") > 0 Or _
InStr(LCase(ParaValue), "net localgroup administrators") > 0 Or _
InStr(LCase(ParaValue), " and ") > 0 Or _
InStr(LCase(ParaValue), "net user") > 0 Or _
InStr(LCase(ParaValue), " or ") > 0 Then
Response.Write ""
Response.End
Else
SafeRequest = ParaValue
End If
End Function
全站將 Request("param") 替換為 SafeRequest("param")。
IsNumeric 驗證,字串型嚴格長度/格式校驗。此函數可作為舊系統快速加固臨時方案,新專案務必採用參數化查詢從源頭消除注入風險。