Web 伺服器是企業面向互聯網的核心資產,其安全防護不能止步於安裝防火牆、打補丁。本文從攻擊者視角、最小權限架構、腳本層防禦三個維度,構建纵深防禦體系,並提供可落地的檢查清單與工具鏈。
防禦者關注「如何配置安全」,攻擊者關注「哪裡可被利用」。定期進行 紅隊演練 / 滲透測試 / 自動化掃描,發現配置盲區。
Nmap -sS -sV --script vuln、Nessus、OpenVAS、Shodan / ZoomEye 資產映射OWASP ZAP、Burp Suite、Nikto、sqlmapsnmpwalk -v2c -c public target、curl -X TRACE targetgit-secrets、truffleHog600、不在 Web 根目錄下最小權限、職責分離、預設拒絕、動態授權。同一台伺服器部署多種服務(Web、FTP、DB、OA)時,必須在 OS、檔案系統、應用層實現強隔離。
# 目錄結構規劃
D:\WebApps\ -> Web 服務內容(IIS_IUSRS: RX,WebAppPool: RW)
E:\FTPRoot\ -> FTP 根目錄(FTP_User: RW,WebAppPool: 無權限)
F:\OARoot\ -> OA 系統目錄(OA_Service: RW,其他無權限)
# PowerShell 設定 ACL 範例
$acl = Get-Acl D:\WebApps
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS_IUSRS","ReadAndExecute","ContainerInherit,ObjectInherit","None","Allow")
$acl.AddAccessRule($rule)
Set-Acl D:\WebApps $acl
# 移除繼承,阻斷跨目錄存取
$acl.SetAccessRuleProtection($true, $false)
httpd_sys_content_t、FTP 限於 public_content_tDynamicUser=yes、PrivateTmp=yes、ProtectSystem=strict、ReadWritePaths=/var/www| 服務 | 資料庫帳號 | 權限範圍 | 連線來源限制 |
|---|---|---|---|
| Web 前端 | web_ro / web_rw | SELECT / DML on business tables | Web 伺服器 IP 段 |
| FTP 服務 | ftp_user | 僅檔案表增刪改查 | FTP 伺服器 IP |
| OA 系統 | oa_app | 完整業務權限 | OA 應用伺服器 IP |
| 備份/監控 | backup_ro / monitor_ro | 僅 SELECT on 所有表 | 備份/監控伺服器 IP |
攻擊者控制 HTTP 參數(GET/POST/JSON/Header/Cookie),經由應用代碼流入 SQL、OS 命令、檔案系統、LDAP、反序列化等 Sink 點。
SELECT * FROM users WHERE id = ?)ProcessBuilder 陣列形式、subprocess.run(args_list)、避免 shell=TruePath.Combine、os.path.join、realpath 校驗在允許目錄內HtmlEncode、模板引擎自動逃逸JavaScriptEncodeUrlEncodeContent-Security-Policy: default-src 'self'; script-src 'self' 'nonce-xxx'; object-src 'none'
# 安全 Cookie 範例
Set-Cookie: session_id=abc123; Secure; HttpOnly; SameSite=Strict; Path=/; Max-Age=3600
# 開發框架配置
# Spring: server.servlet.session.cookie.secure=true, .httponly=true, .same-site=strict
# Django: SESSION_COOKIE_SECURE=True, SESSION_COOKIE_HTTPONLY=True, SESSION_COOKIE_SAMESITE='Strict'
# PHP: session.cookie_secure=1, session.cookie_httponly=1, session.cookie_samesite=Strict
status=500 AND (sql_error OR stack_trace)、url=*../* OR url=*cmd.exe*| 頻率 | 動作 | 工具/產出 |
|---|---|---|
| 每日 | 審計錯誤日誌、異常登入、WAF 攔截日誌 | Kibana 儀表板、告警郵件 |
| 每週 | 掃描新增 CVE、檢查補丁部署、複核權限變更 | Nessus 報告、Ansible 合規報告 |
| 每月 | 滲透測試(內部/外部)、應急演練、備份恢複測試 | 測試報告、整改追蹤單 |
| 每季 | 架構安全評估、威脅建模更新、供應鏈安全審計 | 威脅模型文檔、SBOM 清單 |
Web 伺服器安全非一次性專案,而是持續的工程實踐。將「攻擊者視角」內化為日常審計習慣,將「最小權限」貫穿基礎設施與應用代碼,將「腳本防禦」前移至開發階段並輔以執行時保護,方能構建經得起實戰考驗的防禦體系。