首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

ASP + SQL Server 構建網頁防火牆:IP 白名單 + 資料庫帳密雙重驗證

     編輯:關於SqlServer

架構設計

  1. IP 白名單:內網 IP 段 (如 `10.61.96.x` ~ `10.61.97.x`) 直接放行。
  2. 資料庫帳密驗證:外部 IP 需輸入 SQL Server 登入帳密,通過連線測試才授權。
  3. Session 記憶:驗證通過寫入 `Session("Authed") = True`,後續頁面攔截器檢查 Session。

實作步驟

1. SQL Server 建立登入帳號

CREATE LOGIN web_user WITH PASSWORD = 'StrongP@ssw0rd';
CREATE USER web_user FOR LOGIN web_user;
-- 僅授予必要權限,如 SELECT 特定檢視

2. IIS 建立系統 DSN (ODBC)

  • 控制台 → 管理工具 → ODBC 資料來源 (64-bit) → 系統 DSN → 新增 → **SQL Server**。
  • 名稱:`WebFirewallDSN`,伺服器:`(local)` 或 IP,驗證:SQL Server 驗證,預設資料庫:`master`。
  • **推薦系統 DSN**:所有應用程式池身份可用,避免使用者 DSN 限制。

3. ASP 防火牆頁面 (firewall.asp)

<%@ 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 %>

4. 受保護頁面攔截器 (include/auth_check.asp)

<%
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.NET Core + IdentityServer / Azure AD / Windows Authentication:成熟驗證授權框架,支援 OAuth2/OIDC、MFA、單一登入。
  • IIS URL Authorization / IP Address and Domain Restrictions:原生模組直接在 Web 伺服器層封鎖/允許 IP,無需程式碼。
  • Web Application Firewall (WAF):Azure Front Door / AWS WAF / Cloudflare / ModSecurity,防禦 SQLi、XSS、Bot、DDoS。

總結

ASP + SQL Server 手工防火牆適合**舊系統快速加固**、**無法升級框架**的場景。核心邏輯:`IP 白名單 → 資料庫連線測試 → Session 授權`。新專務請直接採用現代身分識別與 WAF 體系,安全性與維護性皆優於手工實作。

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