首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

ASP 防 SQL 注入四大過濾函數:數值、貨幣、字串、危險字元全覆蓋

     編輯:MySQL 資料庫相關知識

核心原則:所有 Request 來源皆須過濾

不只 Request.Form、Request.QueryString,Cookie、ServerVariables、Headers 同樣危險。

四大過濾函數(VBScript/ASP 經典寫法)

1. killn - 數值型參數

Function killn(ByVal s1)
    If Not IsNumeric(s1) Then
        killn = 0
    Else
        If s1 < 0 Or s1 > 2147483647 Then
            killn = 0
        Else
            killn = CLng(s1)
        End If
    End If
End Function

✅ 強制轉 Long、範圍限制、非數值歸零

2. killc - 貨幣型參數

Function killc(ByVal s1)
    If Not IsNumeric(s1) Then
        killc = 0
    Else
        killc = FormatNumber(s1, 2, -1, 0, 0)  ' 兩位小數、無千分位、前導零
    End If
End Function

3. killw - 一般字串參數

Function killw(ByVal s1)
    If Len(s1) = 0 Then
        killw = ""
    Else
        killw = Trim(Replace(s1, "'", ""))  ' 移除單引號、去首尾空白
    End If
End Function

4. killbad - 危險字元全清洗(含 XSS 防禦)

Function killbad(ByVal s1)
    If Len(s1) = 0 Then
        killbad = ""
    Else
        killbad = Trim(Replace(Replace(Replace(Replace( _
            Replace(Replace(Replace(Replace(s1, _
            Chr(10), "
"), _ ' 換行 Chr(34), ""), _ ' 雙引號 ">", ">"), _ ' 大於號 "<", "<"), _ ' 小於號 "&", "&"), _ ' & 符號 Chr(39), "'"), _ ' 單引號 HTML 實體 Chr(32), " "), _ ' 空白標準化 Chr(13), "")) ' 回車符 End If End Function

使用建議

  • 在 Global.asa Session_OnStart 或公用 include 檔中集中呼叫
  • 建立 SafeRequest("param") 包裝函數,自動判斷型別套用對應過濾
  • 參數化查詢才是根本解,過濾函數僅為舊代碼快速修補的第二道防線

現代替代方案

ASP.NET 請直接使用 SqlParameter、Entity Framework、Dapper 等 ORM/微型 ORM 內建參數化機制,勿自行拼接 SQL。

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