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的核心工作方式是中间人代理。配置步骤:

  1. 打开Burp,进入Proxy > Options
  2. 默认监听127.0.0.1:8080,可以不改
  3. 勾选Support invisible proxying(对API扫描有用)
  4. 浏览器或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流量