OWASP ZAP 教學:免費弱點掃描工具下載、安裝到報告輸出完整指南
- TL;DR
- 什麼是 OWASP ZAP?
- 誰需要學 OWASP ZAP?
- ZAP vs Burp Suite:該選哪個?
- ZAP 能做什麼?不能做什麼?
- 安裝與環境設定
- Windows 安裝
- macOS 安裝
- Linux 安裝
- Docker 部署(推薦)
- ZAP 功能詳解
- 被動掃描(Passive Scan)
- 主動掃描(Active Scan)
- Spider 爬蟲
- Fuzzer 模糊測試
- 實戰教學
- 掃描本地開發環境
- 掃描 OWASP Juice Shop
- 掃描正式網站注意事項
- 報告輸出與解讀
- 報告格式選擇
- 報告內容解讀
- 誤報判斷技巧
- CI/CD 整合
- ZAP CLI 工具
- GitHub Actions 整合
- GitLab CI 整合
- Jenkins 整合
- 進階設定
- 自訂掃描規則
- 認證掃描設定
- API 掃描
- 常見問題 FAQ
- Q1:OWASP ZAP 是免費的嗎?
- Q2:掃描別人的網站合法嗎?
- Q3:ZAP 能發現所有漏洞嗎?
- 結論
OWASP ZAP 教學:免費弱點掃描工具下載、安裝到報告輸出完整指南
TL;DR
💡 重點摘要:- OWASP ZAP(Zed Attack Proxy)是免費開源的網站弱點掃描工具
- 支援 Windows、macOS、Linux 及 Docker 部署
- 提供被動掃描、主動掃描、Spider 爬蟲、Fuzzer 等功能
- 可輸出 HTML、XML、JSON 格式報告
- 可整合進 CI/CD Pipeline 實現自動化安全測試
什麼是 OWASP ZAP?
OWASP ZAP(Zed Attack Proxy)是全球最受歡迎的免費網站弱點掃描工具。由 OWASP 社群維護,專為找出網站安全漏洞而設計。
ZAP 的全名是 Zed Attack Proxy。它扮演的角色是「中間人代理」。當你瀏覽網站時,所有流量都會經過 ZAP。這讓 ZAP 能夠分析每一個 HTTP 請求和回應,找出潛在的安全問題。
想深入了解 OWASP 組織和其他安全專案,可以參考 OWASP 完整指南。
誰需要學 OWASP ZAP?
ZAP 適合這些人使用:
- 資安工程師:執行滲透測試前的自動化掃描
- 開發者:在上線前檢測自己寫的程式碼
- QA 測試人員:將安全測試納入測試流程
- DevOps 工程師:建置自動化安全掃描 Pipeline
ZAP vs Burp Suite:該選哪個?
市面上最常被比較的兩個工具就是 ZAP 和 Burp Suite。
| 比較項目 | OWASP ZAP | Burp Suite |
|---|---|---|
| 價格 | 完全免費 | 免費版功能有限,Pro 版每年 $449 美元 |
| 開源 | 是 | 否 |
| 自動化掃描 | 免費提供 | Pro 版才有 |
| API 掃描 | 支援 | 支援 |
| CI/CD 整合 | 原生支援 | 需 Pro 版 |
| 社群支援 | 活躍 | 活躍 |
| 學習曲線 | 中等 | 中等偏高 |
建議:預算有限或剛入門,選 ZAP。需要更進階的手動測試功能,考慮 Burp Suite Pro。
ZAP 能做什麼?不能做什麼?
ZAP 能做到的事:
- 自動找出 XSS、SQL Injection 等常見漏洞
- 分析網站結構和所有端點
- 記錄和重放 HTTP 請求
- 模糊測試(Fuzzing)
- 產生專業的掃描報告
ZAP 的限制:
- 無法找出商業邏輯漏洞
- 對 JavaScript 重度使用的 SPA 網站支援較弱
- 需要人工判斷誤報
- 無法完全取代人工滲透測試
安裝與環境設定
ZAP 支援多種安裝方式。選擇最適合你環境的方法。
Windows 安裝
- 前往 ZAP 官方下載頁面
- 下載 Windows Installer(.exe 檔案)
- 執行安裝程式,按照提示完成安裝
- 安裝完成後,從開始功能表啟動 ZAP
系統需求:
- Windows 10 或更新版本
- Java 11 或更新版本(安裝程式會自動處理)
- 至少 4GB RAM(建議 8GB)
macOS 安裝
方法一:使用 DMG 安裝檔
- 下載 macOS DMG 檔案
- 開啟 DMG,將 ZAP 拖曳到 Applications 資料夾
- 首次開啟時,按住 Control 點擊,選擇「開啟」
方法二:使用 Homebrew
brew install --cask zap
Linux 安裝
Debian/Ubuntu:
# 下載 .deb 套件
wget https://github.com/zaproxy/zaproxy/releases/download/v2.15.0/ZAP_2_15_0_unix.sh
# 執行安裝
chmod +x ZAP_2_15_0_unix.sh
./ZAP_2_15_0_unix.sh
使用 Snap:
sudo snap install zaproxy --classic
Docker 部署(推薦)
Docker 是最乾淨的部署方式。不用擔心系統相依性問題。
# 拉取最新映像檔
docker pull zaproxy/zap-stable
# 執行 ZAP
docker run -u zap -p 8080:8080 -p 8090:8090 -i zaproxy/zap-stable zap-webswing.sh
執行後,開啟瀏覽器前往 http://localhost:8080/zap/ 即可使用網頁版介面。
Headless 模式(適合 CI/CD):
docker run -v $(pwd):/zap/wrk/:rw -t zaproxy/zap-stable zap-baseline.py \
-t https://example.com \
-r report.html
ZAP 功能詳解
ZAP 提供四種主要的掃描功能。理解它們的差異,才能有效運用。
被動掃描(Passive Scan)
被動掃描是最安全的掃描方式。它只分析經過 ZAP 的流量,不會發送任何額外請求。
被動掃描能發現:
- 缺少的安全 Header(如 X-Frame-Options、CSP)
- Cookie 設定問題(缺少 HttpOnly、Secure 旗標)
- 敏感資訊洩露(如錯誤訊息、版本資訊)
- 不安全的內容載入(Mixed Content)
使用方式:
- 設定瀏覽器 Proxy 指向 ZAP(預設 localhost:8080)
- 正常瀏覽目標網站
- ZAP 會自動分析所有流量
- 查看「Alerts」標籤頁檢視發現的問題
被動掃描是零風險的。可以用在任何網站上,包括正式環境。
主動掃描(Active Scan)
主動掃描會實際發送攻擊封包來測試網站。這是找出漏洞最有效的方式,但也有風險。
主動掃描能發現:
- SQL Injection
- Cross-Site Scripting(XSS)
- Path Traversal
- Remote File Inclusion
- Command Injection
- 其他 OWASP Top 10 漏洞
使用方式:
- 先用 Spider 或手動瀏覽收集網站結構
- 在 Sites 樹狀圖中,右鍵點擊目標
- 選擇「Attack」→「Active Scan」
- 設定掃描策略,點擊「Start Scan」
警告:主動掃描可能造成系統負載增加、產生大量日誌、甚至影響系統穩定。只對你有權限測試的網站使用。
Spider 爬蟲
Spider 會自動探索網站的所有連結和頁面。這是掃描前的必要步驟。
Spider 的功能:
- 自動發現所有可訪問的 URL
- 找出隱藏的目錄和檔案
- 識別表單和參數
- 建立完整的網站地圖
傳統 Spider vs AJAX Spider:
| 類型 | 適用場景 | 特點 |
|---|---|---|
| 傳統 Spider | 傳統網站、靜態頁面 | 快速、資源消耗低 |
| AJAX Spider | SPA、JavaScript 重度網站 | 模擬瀏覽器、較慢但更完整 |
使用 AJAX Spider:
右鍵點擊目標 URL → Attack → AJAX Spider
對 React、Vue、Angular 等現代前端框架網站,建議兩種 Spider 都執行。
Fuzzer 模糊測試
Fuzzer 是進階功能。它會對特定參數發送大量變形的輸入,測試系統的處理能力。
Fuzzer 使用場景:
- 測試輸入驗證的強度
- 尋找緩衝區溢位
- 測試 API 參數邊界
- 繞過身份驗證
使用方式:
- 在 History 中找到目標請求
- 右鍵選擇「Attack」→「Fuzz」
- 選擇要測試的參數位置
- 選擇 Payload 列表(ZAP 內建多種)
- 開始 Fuzzing
實戰教學
理論講完了。現在動手做。
掃描本地開發環境
這是最安全的練習方式。掃描自己的開發環境。
步驟:
-
啟動你的本地開發伺服器
# 例如 Node.js 專案 npm run dev # 假設運行在 http://localhost:3000 -
啟動 ZAP 並設定 Proxy
- 開啟 ZAP
- 預設 Proxy 在 localhost:8080
-
設定瀏覽器使用 ZAP Proxy
- 推薦使用 Firefox(內建 Proxy 設定)
- 或安裝 FoxyProxy 擴充功能
- 設定 HTTP Proxy 為 127.0.0.1:8080
-
瀏覽目標網站
- 用設定好的瀏覽器訪問 http://localhost:3000
- 點擊所有連結、填寫所有表單
- ZAP 會記錄所有請求
-
執行主動掃描
- 在 Sites 面板找到 localhost:3000
- 右鍵 →「Attack」→「Active Scan」
- 等待掃描完成
-
檢視結果
- 切換到「Alerts」標籤頁
- 依嚴重性排序查看
掃描 OWASP Juice Shop
Juice Shop 是 OWASP 官方的漏洞練習平台。非常適合學習使用。
詳細的 Juice Shop 攻略可以參考 OWASP Juice Shop 教學。
快速建置 Juice Shop:
docker run -d -p 3000:3000 bkimminich/juice-shop
開啟瀏覽器訪問 http://localhost:3000,你會看到一個果汁商店網站。
ZAP 掃描 Juice Shop:
- 在 ZAP 輸入目標 URL:http://localhost:3000
- 執行 Spider 收集所有頁面
- 執行 Active Scan
- 查看發現的漏洞
Juice Shop 故意設計了超過 100 個漏洞。ZAP 能找出大部分自動化可偵測的問題。
掃描正式網站注意事項
掃描正式環境網站之前,請注意以下幾點:
法律責任:
- 只掃描你有授權的網站
- 取得書面許可是最安全的做法
- 未經授權的掃描可能違法
技術注意事項:
- 避開營業尖峰時段
- 調低掃描強度(Scan Policy)
- 監控目標系統負載
- 準備好隨時停止掃描
最佳實務:
- 先在測試環境驗證
- 通知相關 IT 人員
- 保留掃描紀錄
- 排除敏感功能(如支付、刪除)
報告輸出與解讀
掃描完成後,產生報告是重要的一步。
報告格式選擇
ZAP 支援多種報告格式:
| 格式 | 適用場景 | 特點 |
|---|---|---|
| HTML | 給人看的報告 | 美觀、易讀、可用瀏覽器開啟 |
| XML | 系統整合 | 結構化資料、適合程式處理 |
| JSON | API 整合 | 現代格式、易於解析 |
| Markdown | 文件整合 | 可嵌入其他文件 |
產生報告:
- 選單:「Report」→「Generate Report」
- 選擇報告格式
- 選擇要包含的內容(警告等級、詳細程度)
- 指定輸出路徑
- 點擊「Generate」
報告內容解讀
一份 ZAP 報告通常包含以下區塊:
1. 摘要區(Summary)
- 掃描目標 URL
- 掃描時間
- 發現的警告數量(依等級分類)
2. 警告詳情(Alert Details)
每個警告包含:
- 名稱:漏洞類型(如 SQL Injection)
- 風險等級:High / Medium / Low / Informational
- 信心度:High / Medium / Low
- 描述:漏洞說明
- URL:發現問題的位置
- 參數:受影響的參數
- 攻擊:ZAP 使用的測試 Payload
- 證據:系統回應中的異常內容
- 解決方案:修復建議
- 參考資料:相關 CWE、OWASP 連結
3. 按風險等級優先處理
建議的處理順序:
- High:立即修復,可能被立即利用
- Medium:盡快修復,有一定風險
- Low:評估後決定是否修復
- Informational:了解即可,通常是建議事項
誤報判斷技巧
ZAP 不完美。它會產生誤報(False Positive)。
常見誤報情況:
- CSRF Token 誤判:ZAP 可能誤認 Token 保護不足
- SQL Injection 誤報:回應中剛好有類似錯誤訊息
- XSS 誤報:輸出有特殊字元但已正確編碼
判斷方法:
- 手動驗證:嘗試重現 ZAP 的攻擊
- 檢查證據:看「Evidence」欄位是否合理
- 比對原始碼:確認該位置的處理邏輯
- 調整信心度門檻:Low Confidence 的警告優先複查
記錄誤報: 在 ZAP 中可以將確認的誤報標記為「False Positive」,避免重複報告。
看不懂掃描報告?讓專家幫你解讀並提供修復建議
CI/CD 整合
將安全掃描整合進 CI/CD Pipeline,是 DevSecOps 的核心實踐。
ZAP CLI 工具
ZAP 提供三種自動化掃描腳本:
| 腳本 | 用途 | 掃描強度 |
|---|---|---|
| zap-baseline.py | 快速基線掃描 | 被動掃描為主 |
| zap-full-scan.py | 完整掃描 | 被動 + 主動掃描 |
| zap-api-scan.py | API 掃描 | 針對 OpenAPI/SOAP |
GitHub Actions 整合
在你的專案中建立 .github/workflows/zap-scan.yml:
name: ZAP Security Scan
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 0 * * 0' # 每週日執行
jobs:
zap-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ZAP Baseline Scan
uses: zaproxy/[email protected]
with:
target: 'https://your-staging-site.com'
rules_file_name: '.zap/rules.tsv'
- name: Upload Report
uses: actions/upload-artifact@v3
with:
name: zap-report
path: report_html.html
設定忽略規則(.zap/rules.tsv):
10015 IGNORE (Incomplete or No Cache-control)
10021 IGNORE (X-Content-Type-Options Header Missing)
GitLab CI 整合
在 .gitlab-ci.yml 加入:
zap-scan:
stage: security
image: zaproxy/zap-stable
script:
- mkdir -p /zap/wrk
- zap-baseline.py -t $STAGING_URL -r report.html
artifacts:
paths:
- report.html
expire_in: 1 week
only:
- merge_requests
- main
Jenkins 整合
使用 Official ZAP Jenkins Plugin:
- 安裝「Official OWASP ZAP」Plugin
- 在 Pipeline 腳本中加入:
pipeline {
agent any
stages {
stage('Security Scan') {
steps {
script {
startZap(host: 'localhost', port: 8090)
runZapCrawler(host: 'https://your-app.com')
runZapAttack(host: 'https://your-app.com')
archiveZap()
}
}
}
}
}
想在 DevOps 流程導入安全掃描?我們有豐富經驗
進階設定
掌握基礎後,這些進階功能能提升掃描效果。
自訂掃描規則
ZAP 內建上百條掃描規則。你可以根據需求調整。
調整掃描策略:
- 「Analyze」→「Scan Policy Manager」
- 選擇或新增一個 Policy
- 對每條規則設定:
- Threshold:觸發警告的門檻(Off / Low / Medium / High)
- Strength:測試強度(影響掃描速度)
常見調整建議:
- 對 API 專案,關閉 XSS 相關規則
- 對內部系統,可提高掃描強度
- 對正式環境,降低 DOS 相關測試
認證掃描設定
很多網站需要登入才能看到完整功能。ZAP 支援多種認證方式。
Form-Based 認證:
- 「右鍵目標 URL」→「Include in Context」→「New Context」
- 在 Context 中選擇「Authentication」
- 選擇「Form-Based Authentication」
- 設定登入 URL 和表單參數
- 設定登出指標(Logged-out indicator)
Session Management:
- Cookie-based Session
- HTTP Authentication
- JSON Web Token(JWT)
設定登入使用者:
- 在 Context 的「Users」區塊
- 新增使用者和對應憑證
- 選擇「Forced User Mode」強制使用特定身份
API 掃描
針對 API 的掃描需要不同的方法。
匯入 API 定義:
ZAP 支援匯入:
- OpenAPI / Swagger(JSON/YAML)
- SOAP WSDL
- GraphQL Schema
匯入方式:
- 「Import」→「Import an OpenAPI definition」
- 選擇本地檔案或輸入 URL
- ZAP 會自動建立所有端點
API 掃描最佳實務:
- 使用 zap-api-scan.py 自動化
- 提供正確的認證 Header
- 考慮 Rate Limiting,調整掃描速度
- 對 GraphQL,注意 Introspection 查詢
更多 API 安全知識,可以參考 OWASP API Top 10。
常見問題 FAQ
Q1:OWASP ZAP 是免費的嗎?
完全免費。ZAP 是 OWASP 社群維護的開源專案。不管是個人使用、商業使用、還是整合進產品中,都不需要付費。原始碼在 GitHub 上公開,任何人都可以貢獻。
Q2:掃描別人的網站合法嗎?
未經授權的掃描可能違法。即使是「善意」的安全測試,沒有取得網站擁有者的書面授權,就對其進行掃描,在許多國家都屬於非法行為。建議:
- 只掃描自己的網站或獲得授權的目標
- 使用 Juice Shop、WebGoat 等練習平台學習
- 企業環境中,取得正式的測試授權文件
Q3:ZAP 能發現所有漏洞嗎?
不能。ZAP 是自動化工具,有其限制:
- 商業邏輯漏洞(如權限繞過)需要人工測試
- 某些複雜的漏洞需要特定情境才能觸發
- JavaScript 重度網站可能無法完整爬取
- 誤報和漏報都會發生
ZAP 應該作為安全測試的起點,而非終點。搭配人工滲透測試,才能獲得更完整的安全評估。
結論
OWASP ZAP 是資安工程師必備的工具。免費、開源、功能強大。想進一步練習,可以試試 OWASP Mobile 與 IoT 安全 學習行動裝置測試技巧。
重點回顧:
- 安裝簡單:支援多平台,Docker 部署最方便
- 四大功能:被動掃描、主動掃描、Spider、Fuzzer
- 報告專業:多格式輸出,方便不同用途
- CI/CD 友善:原生支援自動化整合
學會 ZAP,你就能:
- 在開發階段就找出安全問題
- 建立自動化安全掃描流程
- 產生專業的安全評估報告
下一步建議:
- 用 Juice Shop 練習實戰技巧
- 嘗試將 ZAP 整合進你的 CI/CD
- 學習解讀報告、判斷誤報
自己掃描不放心?預約專業弱點掃描服務
