Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

ASP 網站安全防護實戰:從原始碼隱藏、資料庫保護到 SQL 注入防禦

編輯:關於伺服器

前言:ASP 便利與風險並存

Active Server Pages (ASP) 以 VBScript/JScript 撰寫、伺服端解譯執行、輸出純 HTML,開發效率極高,成為早期電子商務、BBS、查詢系統主流。但「原始碼可讀、資料庫易下載、SQL 注入頻傳」三大痛點,讓無數站長痛失資料。本文系統梳理 ASP 工作原理、微軟宣稱優點的雙面性、20+ 經典漏洞與對策,並提供可直接落地的防護清單。

ASP 運作機制速覽

  1. 瀏覽器發 HTTP GET/POST 請求 .asp 頁面。
  2. IIS 偵測 .asp 副檔名 → 呼叫 asp.dll (ISAPI) 解譯執行。
  3. ASP 引擎讀取檔案 → 語法分析 → 執行伺服端腳本(存取 DB、運算邏輯)。
  4. 產生純 HTML → 經 IIS 原路回傳瀏覽器渲染。

關鍵特性:原始碼留在伺服端、輸出為純 HTML、支援虛擬目錄隔離物理路徑。

微軟宣稱的「安全優點」與實際風險

宣稱優點實際風險/補充
用戶端看不見原始碼早期 IIS 3.0/PWS 存在 %.、%81、::$DATA 等替代資料流漏洞可洩露原始碼;後續版本雖修補,但新漏洞層出不窮。
虛擬目錄隱藏物理結構正確使用虛擬目錄 + NTFS 權限(HTML 唯讀、ASP 執行)可大幅降低資訊洩漏。

20+ 經典漏洞分類與對策

類別一:原始碼洩露

  1. 替代資料流漏洞 (IIS 3.0/PWS):showcode.asp?source=../../boot.ini → 修補或升級 IIS。
  2. code.asp 範例檔案:刪除 ASPSamp/Samples/code.asp 或封鎖目錄存取。
  3. Index Server .htw 漏洞:null.htw?CiWebHitsFile=xxx.asp → 移除 .htw 對應或套用 Q256888/2kunicode 修補程式。

類別二:Access 資料庫 (.mdb) 直接下載

成因: 資料庫放在 Web 目錄下、檔名可猜測(book.mdb、data.mdb)、無加密。

三層防禦:

  1. 怪異命名 + 深層目錄: ./kdslf/i44/studi/d34ksfslf.mdb
  2. 使用系統 DSN (ODBC) 不寫死連線字串:
    conn.open "MyDSN" 而非 conn.open "driver={...};dbq=" & Server.MapPath("data.mdb")
  3. Access 原生加密 + 密碼:
    工具 → 安全性 → 加密/解密資料庫 → 另存為 → 獨佔模式開啟 → 設定資料庫密碼 → ASP 連線字串加 ;PWD=yourpwd。

類別三:檔案系統物件 (FSO) 濫用

風險: Scripting.FileSystemObject 可讀寫刪改 FAT/NTFS (權限不足時) 任意檔案。

對策:

  • Web 目錄務必置於 NTFS 並嚴格設定權限(IUSR 唯讀/執行,開發者讀寫)。
  • 註冊表移除 FSO 元件註冊:regsvr32 /u scrrun.dll(若不需 FSO 功能)。

類別四:跨站腳本 (XSS) 與 HTML/JS 注入

場景: 留言板、搜尋關鍵字、錯誤頁面直接輸出使用者輸入。

對策: 統一輸出編碼函式:

Function SafeHTML(str)
  str = Replace(str, "&", "&")
  str = Replace(str, "<", "<")
  str = Replace(str, ">", ">")
  str = Replace(str, """", """)
  SafeHTML = str
End Function

所有 Response.Write、<%= %> 輸出均經 SafeHTML() 處理。

類別五:SQL 注入 (SQL Injection)

經典 Payload: username: admin' OR '1'='1 → SQL 變 WHERE username='admin' OR '1'='1' 恆真繞過驗證。

根本防禦:參數化查詢 (Command + Parameters)

Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT * FROM Users WHERE Username=? AND Password=?"
cmd.Parameters.Append cmd.CreateParameter("@u", 200, 1, 50, Request("username"))
cmd.Parameters.Append cmd.CreateParameter("@p", 200, 1, 50, Request("password"))
Set rs = cmd.Execute

輔助措施:
✅ 單引號轉義 Replace(input, "'", "''")
✅ 限制輸入長度、白名單字元(帳號僅英數字)
✅ 資料庫帳號最小權限(僅 SELECT/INSERT/UPDATE,無 DROP/CREATE)

類別六:ASP 原始碼加密部署

使用 Microsoft Script Encoder (screnc.exe) 將 .asp 加密為 .asp (內容變亂碼),IIS 仍可正常執行:

screnc /s /f /l vbscript /e asp input.asp output.asp

進階:核心商業邏輯封裝為 COM+ 元件 (DLL),僅保留薄薄 ASP 呼叫介面。

ASP 安全檢核清單 (部署前必檢)

  • [ ] IIS Lockdown + UrlScan 已套用
  • [ ] 父路徑已停用 (除非必要)
  • [ ] .htr/.htw/.ida/.idq 對應已移除
  • [ ] 資料庫 .mdb 置於 Web 根目錄外、怪異命名、Access 加密+密碼、使用 DSN
  • [ ] 所有輸出經 SafeHTML() 編碼
  • [ ] 所有 SQL 使用參數化查詢
  • [ ] FSO 元件已移除或權限鎖定
  • [ ] 錯誤頁面導向友善頁面,不顯示詳細錯誤/堆疊
  • [ ] 生產環境關閉「傳送詳細錯誤至瀏覽器」
  • [ ] 定期掃描新漏洞 (Microsoft Security Bulletin, CVE) 並套用修補

結語

ASP 雖屬經典技術,但許多存續系統仍在服役。安全非一次性動作,而是「最小權限、參數化查詢、輸出編碼、持續修補」的長期實踐。將上述清單納入專案 Definition of Done,方能讓 ASP 網站在惡劣網路環境中穩健運營。

Copyright © Windows教程網 All Rights Reserved