IIS + ASP + Access 曾是中小型網站(網路銀行、電子商務、BBS、查詢系統)首選組合:開發快、成本低、部署簡單。但安全短板極其明顯:
🎯 核心風險點: Access 資料庫檔案 (.mdb) 直接暴露於 Web 目錄 → 可被下載 → 加密機制脆弱 → 幾十行程式即可破解密碼 → 全庫資料淪陷。
🎯 次級風險: ASP 原始碼非編譯、表單參數透傳 URL、虛擬主機代管商道德風險。
慣用命名 book.mdb、store.mdb 放在 /database/ 或根目錄 → 攻擊者輸入 https://site/database/store.mdb 直接下載。
Access 97/2000 加密演算法:使用者密碼與固定金鑰(如 86 FB EC 37 5D 44 9C FA C6 5E 28 E6 13)XOR 產生加密串,存於檔案 Offset &H42。公開解密程式碼僅 50 行,秒級破解。
結論: 防止下載是唯一有效防線,加密只是延緩時間。
原本:/database/book.mdb
強化:/akkt/kj61/acd/av5/faq9jl.mdb
攻擊者無法透過字典掃描或推測路徑取得檔案。
錯誤寫法 (連線字串含路徑):
DBPath = Server.MapPath("./akkt/kj61/acd/av5/faq9jl.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
正確寫法 (僅 DSN 名稱):
conn.Open "MyAppDSN"
DSN 於控制台 → 管理工具 → 資料來源 (ODBC) → 系統 DSN 建立,指向實體 .mdb 路徑。ASP 原始碼外洩也無法得知實體路徑與檔名。
| 方案 | 原理 | 優點 | 缺點 | 建議場景 |
|---|---|---|---|---|
| COM 元件 (DLL) | 核心邏輯編譯為 VB6/VC++ DLL,註冊 COM+,ASP 呼叫 | 原始碼不可逆、效能佳、版本管理易 | 開發門檻高、修改需重編譯部署 | 核心演算法、授權驗證、加密模組 |
| Script Encoder (screnc.exe) | 將 .asp/vbs/js 加密為亂碼,IIS 仍可解譯執行 | 操作簡單、無需改代碼、即時生效 | 非強加密,專業逆向可還原、除錯困難 | 全站快速加密、非核心邏輯 |
實務建議: 核心模組走 COM 元件,其餘頁面統一用 Script Encoder 加密,平衡安全與維運效率。
漏洞場景: 註冊頁 reg.asp → 成功導向 hrmis.asp?page=1。攻擊者直接輸入 hrmis.asp?page=1 繞過註冊。
修正:
' reg.asp 註冊成功後
Session("RegOK") = True
Response.Redirect "hrmis.asp?page=1"
' hrmis.asp 頁面最上方
If Session("RegOK") <> True Then
Response.Redirect "reg.asp"
End If
同理應用於登入驗證、多步驟精靈、權限控制,確保伺服端狀態機制不可繞過。
導入上述措施後,某電子商務系統實測:
✅ 資料庫檔案在知情路徑下仍無法下載 (NTFS 權限 + DSN 隔離)
✅ ASP 原始碼加密部署,代管商無法直接閱讀商業邏輯
✅ 註冊/登入流程強制 Session 驗證,消除 URL 參數繞過
✅ 參數化查詢全面替換字串拼接 SQL,杜絕注入風險
IIS+ASP+Access 架構雖老舊,若能做到「資料庫物理隔離+DSN抽象化+原始碼加密+參數化查詢+Session流程控制」,即可將風險壓縮至可接受區間。對於新專案,強烈建議遷移至 ASP.NET Core + SQL Server/PostgreSQL + Entity Framework,從架構層面根除經典痛點。