在 Ubuntu 上使用 Postman 进行 API 安全性测试
一 环境准备与安装
- 安装方式(任选其一)
- Snap:sudo snap install postman --classic
- APT 仓库:
- wget -qO - https://dl.postman.co/postman.gpg | sudo apt-key add -
- echo “deb https://dl.postman.co/debian $(lsb_release -cs) main” | sudo tee /etc/apt/sources.list.d/postman.list
- sudo apt update && sudo apt install postman
- 官方压缩包:
- wget https://dl.pstmn.io/download/latest/linux64 -O postman.tar.gz
- sudo tar -xzf postman.tar.gz -C /opt/
- sudo ln -s /opt/Postman/Postman /usr/local/bin/postman
- 导入 API 定义
- 在 Postman 中点击 Import,导入 OpenAPI/Swagger 的 JSON/YAML,自动生成请求集合以便后续安全用例编写与批量运行。
二 与代理抓包工具联动
- 将 Postman 流量接入 Burp Suite/ZAP 进行深度分析与拦截:
- 在 Postman 的 Settings → General 打开 Global Proxy Configuration,配置代理主机与端口(与 Burp 一致)。
- 若被测 API 使用 HTTPS/TLS,需让系统信任 Burp CA:
- 推荐做法:将 Burp CA 导入 Ubuntu 系统信任库(浏览器与 Postman 均会继承系统信任)。
- 临时做法:在 Postman Settings → General 将 SSL certificate verification 设为 Off(仅测试环境,避免生产风险)。
- 验证:在 Burp 的 Proxy → HTTP history 能看到 Postman 发出的请求;若无流量,检查是否开启拦截、代理配置是否一致、是否设置了过滤范围。
三 核心安全测试用例设计
- 认证与授权
- 覆盖 Basic、Bearer/JWT、OAuth 2.0 流程;验证 失效令牌、过期令牌、权限提升(低权限用户越权访问高权限资源)等场景。
- 加密与传输
- 全链路使用 HTTPS/TLS;核查是否禁用不安全协议与弱套件(如仅允许 TLS 1.2+)。
- 输入验证与注入
- 对查询参数、请求头、JSON/表单体进行 SQL 注入、XSS、命令注入、路径遍历 等测试(示例:name=normal_user’ OR ‘1’='1;{“comment”:“”})。
- 错误处理与信息泄露
- 校验 4xx/5xx 响应不泄露 堆栈信息、数据库结构、密钥/内部路径 等敏感数据。
- 速率限制与资源控制
- 验证 限流、并发限制、大小限制(请求体/头部过大、上传过大文件)是否生效。
- 安全响应头
- 核查是否设置 Strict-Transport-Security、Content-Security-Policy、X-Frame-Options、X-Content-Type-Options、Referrer-Policy 等。
- 业务逻辑与越权
- 测试 水平越权(访问/修改他人数据)、垂直越权(普通用户执行管理员操作)、批量分配 等。
- 令牌与敏感信息
- 检查 JWT 签名与过期策略、Refresh Token 轮换与撤销、密码重置 令牌一次性与时效性。
- 文件与内容安全
- 验证 上传类型白名单、大小限制、恶意文件检测、存储隔离 与 下载权限。
- 日志与监控
- 确认安全事件(如多次失败登录、异常访问)是否被 记录与告警。
四 在 Postman 中落地执行与自动化
- 组织与变量
- 使用 Collection 管理用例,利用 Environment/Collection Variables 管理 {{base_url}}、{{access_token}} 等,便于多环境切换与数据驱动测试。
- 断言示例(Tests 标签)
- 状态码与内容
- pm.test(“Status is 200”, () => pm.response.to.have.status(200));
- pm.test(“Response has id”, () => pm.expect(pm.response.json()).to.have.property(“id”));
- 安全头检查
- pm.test(“Has CSP header”, () => pm.response.to.have.header(“Content-Security-Policy”));
- pm.test(“HSTS present”, () => pm.response.to.have.header(“Strict-Transport-Security”));
- 错误响应不泄露敏感信息
- pm.test(“Error response no sensitive info”, function () {
if (pm.response.code >= 400) {
const txt = pm.response.text();
pm.expect(txt).to.not.include(“stacktrace”);
pm.expect(txt).to.not.include(“password”);
pm.expect(txt).to.not.include(“secret”);
}
});
- 批量运行与 CI/CD
- 使用 Newman 在命令行/CI 中执行集合与环境:
- 安装:npm install -g newman
- 运行:newman run your_collection.json -e your_env.json --reporters cli,html
- 在 Jenkins/GitHub Actions/GitLab CI 中集成 Newman,实现每次提交/发布自动回归安全用例。
五 合规与注意事项
- 仅在取得 明确授权 的目标系统开展测试,遵守法律与合规要求。
- 避免对生产数据造成破坏:优先使用 测试环境;必要时使用 脱敏数据 与 回滚方案。
- 谨慎处理 关闭证书校验 与 禁用安全头 等设置,测试完成及时恢复。
- 对发现的漏洞按 负责任披露 流程与相关负责人沟通,并提供复现步骤与修复建议。