Postman不仅是强大的API功能测试工具,更是安全工程师手中进行主动安全测试的利器。它通过手动构造恶意请求、自动化脚本和集合运行,有效模拟攻击者行为,发现API层面的安全漏洞。方案在于利用Postman的灵活性,对认证、授权、输入验证、配置安全等关键层面进行测试,而非依赖自动化扫描。
测试策略与功能应用
安全测试的成功依赖于系统化的策略和对工具的深度应用。
1.环境变量与集合:构建测试工作流
作用:高效管理测试数据(如不同权限级别的Token、恶意payload库)。
方法:
创建Security-Testing环境,定义变量如base_url、admin_token、user_token、malicious_payload。
将针对同一API或同一类漏洞的测试用例分组到不同的集合(Collection)中,实现模块化管理和批量运行。
2.Pre-requestScripts与Tests:自动化与验证
Pre-requestScripts:用于在发送请求前动态生成签名、获取最新Token或从变量中随机选取payload,确保每次请求的“新鲜度”。
Tests:关键的安全断言环节。不仅检查HTTP状态码,更要验证响应体、响应时间乃至响应头中的安全属性。
以下是如何利用Postman执行具体的安全测试:
认证机制测试
Token有效性验证:将请求中的Token修改或删除,在Tests中编写脚本验证响应是否为401Unauthorized。
JWT测试:使用Pre-requestScript解码JWT,修改payload部分(如将role:user改为role:admin),重新编码并发送,测试服务端是否验证签名。
暴力破解/账户锁定:在CollectionRunner中,使用CSV文件导入大量用户名/密码组合,批量运行登录请求,观察是否存在账户锁定机制或速率限制。
授权机制测试(越权)
垂直越权(VPE):
步骤:复制一个高权限角色(如Admin)的请求(如DELETE/api/users/123)。
操作:在新请求中,将AuthorizationHeader中的Token替换为低权限用户(如User)的Token。
在Tests中验证响应码必须是403Forbidden,而不是200OK或404NotFound。
水平越权(HPE):
步骤:复制用户A访问自身资源的请求(如GET/api/orders/100,Order100属于用户A)。
操作:保持用户A的Token不变,将URL中的资源ID修改为属于用户B的ID(如GET/api/orders/101)。
验证响应是否应拒绝访问(403)或返回空数据,而非用户B的订单详情。
输入验证测试
SQL注入:
步骤:识别所有参数(URLparams,bodyJSON/XML)。
操作:将参数值替换为经典payload(如'OR'1'='1'--、1;DROPTABLEusers--)。
检查响应中是否包含数据库错误信息(如MySQL、PgSQL错误),或比较恶意请求与正常请求的响应差异。
跨站脚本(XSS):对接收输入并返回输出的API(如搜索API、评论提交API),提交<script>alert(1)</script>,检查响应中该脚本是否被原样输出而未编码。
命令注入:向疑似传递系统命令的参数(如&ip=127.0.0.1)提交127.0.0.1;whoami或127.0.0.1&&cat/etc/passwd,观察响应是否包含命令执行结果。
其他配置安全测试
HTTP方法测试:对同一端点(Endpoint)发送PUT,DELETE,TRACE等非常用方法,测试是否被不当启用。
信息泄露:检查响应头是否包含敏感信息(如Server:nginx/1.18.0)、错误信息是否暴露堆栈跟踪或数据库结构。
CORS误配置:手动添加Origin:https://evil.com的请求头,检查返回的Access-Control-Allow-Origin头是否直接反射了该恶意源,导致可被利用。
高级技巧
批量执行:将大量测试用例(如无数个SQLipayload)保存在外部JSON/CSV文件中,使用CollectionRunner进行数据驱动测试,自动化完成枯燥的payload投递工作。
CI/CD集成:使用Newman(Postman的命令行工具)将安全测试集合集成到DevOps流水线中,实现每次构建时的自动化安全回归测试。
Postman为API安全测试提供了一个高度可控、灵活且强大的平台。它能自动发现未知漏洞,让安全工程师和开发人员能够精准、可重复地验证已知的安全威胁模型。通过精心设计请求、巧妙运用变量和脚本,并系统化地构建测试集合。