網站應用程式防火牆 (WAF):功能與運作原理

Security2026-10-05TryQuickToolBox

為什麼您的網頁應用程式需要的不只是防火牆

您已經有傳統的網路防火牆,但您的網頁應用程式仍然遭受攻擊。為什麼?因為網路防火牆在第 3 層和第 4 層運作,檢查 IP 位址和連接埠。它們無法區分合法的登入請求和隱藏在表單欄位中的 SQL 注入攻擊載荷。這就是網站應用程式防火牆 (WAF) 發揮作用的地方。

WAF 位於使用者和網頁伺服器之間,在第 7 層分析 HTTP/HTTPS 流量。它檢查請求和回應中是否包含表示攻擊的模式——例如 SQL 注入、跨網站指令碼 (XSS) 或惡意檔案上傳——並在它們到達您的應用程式之前予以封鎖。

WAF 究竟做了什麼?

將 WAF 想像成您網頁流量的安全警衛。其核心功能包括:

重要的是,WAF 並非萬靈丹。它補充了安全編碼實踐,但並不能取代它們。然而,配置良好的 WAF 可以提供關鍵的防禦層,特別是對於舊版應用程式或在零日漏洞利用期間。

WAF 如何運作:技術基礎

WAF 使用兩種主要方法分析流量:基於特徵的偵測和基於異常的偵測。

基於特徵的偵測

此方法依賴已知攻擊模式的資料庫。例如,規則可能會在查詢參數中尋找字串 ' OR '1'='1,這是經典的 SQL 注入嘗試。基於特徵的 WAF 速度快且對已知威脅有效,但可能遺漏新型攻擊。

基於異常的偵測

基於異常的 WAF 建立正常流量的基線並標記偏差。例如,如果使用者突然向登入端點提交 10MB 的 POST 請求,那就是異常的。這種方法可以捕捉未知攻擊,但可能產生誤報。

大多數現代 WAF 結合這兩種方法,通常使用機器學習來提高準確性。它們還將 HTTP 請求解析為元件(方法、URL、標頭、主體),並對每個部分套用規則。

部署選項:WAF 位於何處?

您可以透過多種方式部署 WAF,每種方式都有其取捨:

部署類型 說明 優點 缺點
雲端式(反向代理) 流量透過雲端供應商的 WAF 路由(例如 Cloudflare、AWS WAF)。 易於設定、DDoS 防護、全球規模。 增加延遲、經常性成本、資料離開您的基礎設施。
主機式(外掛/模組) 安裝在網頁伺服器本身(例如 ModSecurity 搭配 Nginx/Apache)。 低延遲、完全控制、無第三方依賴。 需要維護、隨伺服器資源擴展。
網路式(設備) 放置在資料中心的專用硬體。 高效能、離線。 昂貴、配置複雜、靈活性較低。

對於大多數現代網頁應用程式,雲端 WAF 或像 ModSecurity 這樣的主機式解決方案是實用的選擇。雲端 WAF 對小型團隊特別有吸引力,因為它們處理基礎設施和規則更新。

關鍵 WAF 規則集和 OWASP 核心規則集

如果您使用 ModSecurity,您可能會將其與 OWASP 核心規則集 (CRS) 配對。CRS 是一組通用的攻擊偵測規則,提供對 OWASP Top 10 的防護。它包括以下規則:

然而,CRS 可能過於積極。您需要調整它以避免封鎖合法流量。從僅偵測模式開始,檢閱記錄,然後逐步啟用封鎖規則。

如何使用 ModSecurity 和 Nginx 設定基本 WAF

以下是在 Ubuntu 上使用 Nginx 部署 ModSecurity 的簡化範例。這為您提供主機式 WAF。

  1. 安裝 ModSecurity 和 Nginx 連接器:
    sudo apt install libmodsecurity3 libnginx-mod-http-modsecurity
  2. 在 Nginx 中啟用模組:將 load_module modules/ngx_http_modsecurity_module.so; 加入 /etc/nginx/nginx.conf 的頂部。
  3. 下載 OWASP CRS:
    git clone https://github.com/coreruleset/coreruleset.git /etc/nginx/modsec/coreruleset
  4. 配置 ModSecurity:建立 /etc/nginx/modsec/main.conf,內容如下:
    Include /etc/nginx/modsec/modsecurity.conf
    Include /etc/nginx/modsec/coreruleset/crs-setup.conf
    Include /etc/nginx/modsec/coreruleset/rules/*.conf
  5. 在您的伺服器區塊中啟用 ModSecurity:
    server {
        modsecurity on;
        modsecurity_rules_file /etc/nginx/modsec/main.conf;
        ...
    }
  6. 測試並重新載入 Nginx:
    sudo nginx -t && sudo systemctl reload nginx

設定後,監控 /var/log/modsec_audit.log 以查看被封鎖的請求。透過為誤報新增排除項來調整規則。

WAF 限制和最佳實踐

WAF 並非萬無一失。攻擊者可以使用編碼技巧、混淆或利用特徵無法捕捉的邏輯缺陷來繞過 WAF。此外,WAF 無法防禦不經過 HTTP 的攻擊,例如直接資料庫存取。

要充分發揮 WAF 的效用:

常見問題

WAF 可以取代安全編碼實踐嗎?

不能。WAF 是補充層。它可以封鎖許多攻擊,但如果 WAF 被繞過或配置錯誤,您程式碼中的漏洞仍然可能被利用。始終遵循安全編碼指南。

WAF 會減慢我的網站速度嗎?

它可能會增加輕微延遲,特別是如果它是雲端式或執行深度檢查。然而,現代 WAF 經過優化,安全效益通常超過輕微的效能影響。像 ModSecurity 這樣的主機式 WAF 可以針對效能進行調整。

如何在雲端 WAF 和自行託管 WAF 之間選擇?

考慮您的預算、團隊專業知識和合規需求。雲端 WAF 更易於設定和擴展,而自行託管 WAF 提供更多控制並將資料保留在您的基礎設施上。對於小型團隊,雲端 WAF 通常更實用。

準備好分析您的 Nginx 記錄並查看您的 WAF 封鎖了哪些攻擊了嗎?使用我們的免費 Nginx 記錄分析器 快速解析和視覺化您的記錄。