CREATE LOGIN web_user WITH PASSWORD = 'StrongP@ssw0rd'; CREATE USER web_user FOR LOGIN web_user; -- 僅授予必要權限,如 SELECT 特定檢視
<%@ Language=VBScript %>
<%
Option Explicit
Dim remoteIP, thirdOctet, userName, passWord, conn, connStr
remoteIP = Request.ServerVariables("REMOTE_ADDR")
' 取得第三段 IP (假設 IPv4)
thirdOctet = Split(remoteIP, ".")(2)
' 內網 IP 範圍判斷:10.61.96.x ~ 10.61.97.x
If Left(remoteIP, 5) = "10.61" And (thirdOctet >= "96" And thirdOctet <= "97") Then
Session("Authed") = True
Response.Redirect "welcome.asp"
Else
' 外部 IP 需驗證
userName = Request.Form("t1")
passWord = Request.Form("t2")
If userName <> "" And passWord <> "" Then
connStr = "DSN=WebFirewallDSN;UID=" & userName & ";PWD=" & passWord
Set conn = Server.CreateObject("ADODB.Connection")
On Error Resume Next
conn.Open connStr
If Err.Number = 0 Then
Session("Authed") = True
conn.Close
Response.Redirect "welcome.asp"
Else
Response.Write "帳號或密碼錯誤,或無連線權限!
"
End If
Set conn = Nothing
End If
%>
防火牆驗證
<% End If %>
<%
If Session("Authed") <> True Then
Response.Redirect "firewall.asp"
End If
%>
在每個受保護頁面頂端 ``。
| 風險 | 對策 |
|---|---|
| 明文傳輸帳密 | 全站強制 HTTPS (SSL/TLS),IIS 綁定憑證、啟用 HSTS |
| SQL 注入 (DSN 字串拼接) | 參數化查詢;此處僅做 `Open` 連線測試,風險較低但仍建議驗證輸入長度/字元 |
| 暴力破解 | 登入失敗計數 + 鎖定 (Application/資料表記錄)、CAPTCHA、IP 封鎖 |
| Session 劫持 | HttpOnly/Secure Cookie、短 Session Timeout、定期重新產生 SessionID |
| 資料庫帳號權限過大 | 最小權限原則:僅 `CONNECT` + `SELECT` 特定檢視/資料表 |
ASP + SQL Server 手工防火牆適合**舊系統快速加固**、**無法升級框架**的場景。核心邏輯:`IP 白名單 → 資料庫連線測試 → Session 授權`。新專務請直接採用現代身分識別與 WAF 體系,安全性與維護性皆優於手工實作。