前言
單純用 JavaScript/VBScript 做前端驗證,原始碼在瀏覽器可見,安全性極低。ASP 執行於伺服器端,搭配 SQL Server 資料庫驗證,可建立簡單、高效、可靠的存取控制機制。
架構設計
- SQL Server 建立登入帳號:儲存允許存取的使用者帳密
- IIS 建立系統 DSN:ODBC 資料來源名稱,供 ASP 連線資料庫
- ASP 程式邏輯:IP 白名單 + 帳密驗證雙重防護
DSN 類型比較與建議
| 類型 | 儲存位置 | 適用範圍 | 建議 |
| 使用者 DSN | 登錄表 | 僅建立者可用 | 不建議 |
| 系統 DSN | 登錄表 | 所有登入使用者 | ✓ 推薦 |
| 檔案 DSN | 實體檔案 | 所有使用者、可攜帶 | ✓ 推薦(配合 NTFS 權限) |
建立系統 DSN 步驟
- 控制台 →「ODBC 資料來源管理員」→「系統 DSN」頁籤 →「新增」
- 選擇「SQL Server」→ 下一步
- 輸入 DSN 名稱、描述、伺服器位址
- 選擇驗證模式(Windows 整合或 SQL Server 驗證)
- 選擇預設資料庫 → 完成
ASP 防火牆程式碼實作
<%@ Language=VBScript %>
<%
' 取得客戶端 IP
Dim remoteIP, thirdOctet
remoteIP = Request.ServerVariables("REMOTE_ADDR")
' 擷取第三段 IP(假設內網 10.61.96.x ~ 10.61.97.x)
Dim parts
parts = Split(remoteIP, ".")
If UBound(parts) = 3 Then thirdOctet = CInt(parts(2))
' 判斷邏輯:內網 IP 直接通過,外網需帳密驗證
Dim isInternal
isInternal = (Left(remoteIP, 5) = "10.61") And (thirdOctet >= 96 And thirdOctet <= 97)
If Not isInternal Then
' 外網使用者:驗證帳密
Dim username, password, connStr, conn
username = Request.Form("t1")
password = Request.Form("t2")
If username <> "" And password <> "" Then
' 讀取 DSN 設定檔
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(Server.MapPath("dsn.txt"))
connStr = f.ReadLine & ";uid=" & username & ";pwd=" & password
f.Close
Set conn = Server.CreateObject("ADODB.Connection")
On Error Resume Next
conn.Open connStr
If Err.Number = 3709 Then
' 驗證失敗
Response.Write "帳號或密碼錯誤!
"
ShowLoginForm()
Else
' 驗證成功
Session("Authenticated") = True
conn.Close
Response.Write "歡迎,您已通過驗證!"
End If
Set conn = Nothing
Else
ShowLoginForm()
End If
Else
' 內網使用者
Session("Authenticated") = True
Response.Write "內網使用者,直接通過驗證!"
End If
Sub ShowLoginForm()
Response.Write ""
End Sub
%>
多頁面保護機制
在每個需保護的頁面頂端加入:
<%
If Session("Authenticated") <> True Then
Response.Redirect "firewall.asp"
End If
%>
安全性強化建議
- 密碼資料庫欄位使用雜湊儲存(如 SHA-256 + Salt)
- 連線字串勿硬編碼,放置於 DSN 或加密設定檔
- 啟用 SSL/TLS 加密傳輸
- 記錄登入嘗試(成功/失敗)供稽核
- 考慮加入帳號鎖定機制防暴力破解
- 上一篇文章: 善用索引大幅提升 SQL Server 查詢效能:核心原則與實戰技巧
- 下一篇文章: SQL Server DBA 必備:常用管理 SQL 與 T-SQL 指令速查表
Copyright ©
程式碼之家 All Rights Reserved