3. 环境搭建
好,咱们正式开始动手了。这一章我带你搭环境。别小看这一步,我在项目里见过太多人因为环境没配好,折腾一整天,最后发现是Python版本冲突或者Docker镜像拉不下来。说白了,环境搭得稳,后面才能跑得快。
3.1 Python虚拟环境配置
为什么要用虚拟环境?你想想看,一个项目要requests 2.25,另一个要2.26,装在一起就打架。虚拟环境就是给每个项目一个独立的小房间,互不干扰。
核心原则:每个API扫描项目,都应该有自己的虚拟环境。我个人的习惯是,项目根目录下直接建一个.venv文件夹。
3.1.1 创建虚拟环境
Python 3.3以上自带venv模块,不需要额外装东西。直接跑:
# 创建虚拟环境
python3 -m venv .venv
# 激活(Linux/Mac)
source .venv/bin/activate
# 激活(Windows)
.venv\Scripts\activate
# 检查是否激活成功
which python # 应该指向 .venv/bin/python
激活后,终端前面会出现(.venv)字样。嗯,看到这个就对了。
3.1.2 安装依赖包
我建议先把常用的扫描依赖装好:
pip install requests
pip install urllib3
pip install pyyaml
pip install jsonschema
pip install pytest
pip install pytest-html
# 导出依赖清单
pip freeze > requirements.txt
我的习惯:每次装完包,立刻pip freeze > requirements.txt。这样队友拉代码后,一条pip install -r requirements.txt就能复现环境。我曾经因为忘了做这一步,导致CI/CD流水线里环境不一致,排查了整整一个下午。
3.1.3 退出与删除
# 退出虚拟环境
deactivate
# 删除虚拟环境(直接删文件夹)
rm -rf .venv
说白了,虚拟环境就是个文件夹。不要了直接删,干净利落。
3.2 Docker部署扫描工具
Docker的好处不用我多说。一次构建,到处运行。我团队里现在所有扫描工具都容器化了,本地测完,直接推到K8s里跑定时任务。
3.2.1 安装Docker
各系统安装方式不同,我列个表:
| 系统 | 安装方式 | 验证命令 |
|---|---|---|
| Ubuntu/Debian | sudo apt install docker.io |
docker --version |
| CentOS/RHEL | sudo yum install docker |
docker --version |
| macOS | 下载Docker Desktop | docker --version |
| Windows | 下载Docker Desktop | docker --version |
注意:Linux下安装后,记得把当前用户加入docker组,否则每次都要sudo:sudo usermod -aG docker $USER。然后退出重新登录。
3.2.2 拉取常用扫描工具镜像
我平时用的最多的几个镜像:
# OWASP ZAP(全能型)
docker pull owasp/zap2docker-stable
# Nikto(Web服务器扫描)
docker pull secfigo/nikto
# SQLMap(SQL注入检测)
docker pull paoloo/sqlmap
# Nuclei(漏洞模板扫描)
docker pull projectdiscovery/nuclei:latest
3.2.3 运行扫描容器
以OWASP ZAP为例,我常用的启动方式:
# 启动ZAP并暴露API端口
docker run -d --name zap -p 8080:8080 owasp/zap2docker-stable zap.sh -daemon -port 8080 -host 0.0.0.0
# 执行主动扫描
docker exec zap zap-cli active-scan -r http://target-api.com
# 生成报告
docker exec zap zap-cli report -o /zap/report.html -f html
避坑指南:我曾经在CI流水线里直接用docker run --rm,结果每次扫描完容器就删了,报告也没了。后来改成挂载卷:-v $(pwd)/reports:/zap,报告直接落到本地。
3.3 Postman/Newman安装
Postman是API测试的标配。但说实话,手动点来点去效率太低。Newman才是自动化测试的利器——命令行跑Postman集合。
3.3.1 安装Postman
Postman有桌面版和Web版。我建议用桌面版,功能更全:
- Linux:下载
.tar.gz包,解压后运行./Postman - macOS:直接App Store或官网下载
.dmg - Windows:官网下载
.exe安装包
3.3.2 安装Newman
Newman基于Node.js,所以先要有Node环境:
# 安装Node.js(推荐用nvm管理版本)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
nvm install 18
nvm use 18
# 全局安装Newman
npm install -g newman
# 验证安装
newman --version
3.3.3 使用Newman运行测试
# 运行Postman集合
newman run API-Scan-Collection.json \
-e Environment.json \
--reporters cli,htmlextra \
--reporter-htmlextra-export ./reports/newman-report.html
# 带数据文件运行
newman run API-Scan-Collection.json \
-d test-data.csv \
--delay-request 100
关键参数说明:
-e:指定环境变量文件-d:指定测试数据文件(CSV/JSON)--delay-request:请求间隔(毫秒),防止触发限流--reporters:输出报告格式
3.4 Burp Suite社区版配置
Burp Suite是Web安全测试的瑞士军刀。社区版免费,功能足够做API扫描。
3.4.1 下载与安装
去PortSwigger官网下载社区版。注意,需要Java环境:
# 检查Java版本(需要Java 17+)
java -version
# 启动Burp Suite(Linux/Mac)
java -jar burpsuite_community_v2023.10.jar
# 启动Burp Suite(Windows)
# 双击jar文件,或者命令行执行
3.4.2 配置代理
Burp的核心工作方式是中间人代理。配置步骤:
- 打开Burp,进入Proxy > Options
- 默认监听
127.0.0.1:8080,可以不改 - 勾选Support invisible proxying(对API扫描有用)
- 浏览器或API客户端设置代理为
127.0.0.1:8080
注意:社区版不支持保存项目文件。每次关闭后,历史记录就没了。我建议扫描完立刻导出报告:Target > Site map > 右键 > Save selected items。
3.4.3 配置SSL证书
扫描HTTPS接口时,需要安装Burp的CA证书:
# 浏览器访问 http://burp
# 下载 cacert.der 证书
# 导入到系统信任证书列表
# Linux导入示例
sudo cp cacert.der /usr/local/share/ca-certificates/burp.crt
sudo update-ca-certificates
# macOS导入
# 双击cacert.der,添加到"钥匙串访问" > "系统" > 设置为"始终信任"
3.4.4 配置API扫描范围
我习惯这样配置扫描范围:
# 在Target > Scope中设置
# Include: https://api.example.com/*
# Exclude: https://api.example.com/health
# https://api.example.com/metrics
# 然后在Proxy > Options中勾选
# "Force use of TLS/SSL for incoming requests"
# "Support invisible proxying"
我的经验:扫描前一定先配好Scope。否则Burp会拦截所有流量,包括你浏览网页的请求,乱得很。我曾经没配Scope,结果扫描报告里混了一堆百度谷歌的请求,清理数据花了一个小时。
3.5 环境验证
所有工具装完后,跑一个快速验证脚本:
#!/bin/bash
# 环境验证脚本
echo "=== Python环境 ==="
python3 --version
pip --version
echo "=== Docker环境 ==="
docker --version
docker ps
echo "=== Newman环境 ==="
newman --version
echo "=== Burp Suite ==="
# 检查Burp是否在运行
curl -s -o /dev/null -w "%{http_code}" --proxy http://127.0.0.1:8080 https://httpbin.org/get
echo ""
echo "环境验证完成!"
嗯,到这步,你的API安全扫描环境就搭好了。下一章咱们开始写第一个扫描脚本。
本章小结:
- Python虚拟环境用
venv,隔离依赖 - Docker部署扫描工具,一次构建到处运行
- Newman命令行跑Postman集合,实现自动化
- Burp Suite社区版配好代理和证书,拦截API流量