当前位置: 首页 > 测试知识 > API安全测试初探:利用Postman检测常见漏洞(如越权、注入)
API安全测试初探:利用Postman检测常见漏洞(如越权、注入)
2025-11-20 作者cwb 浏览次数4

在现在的软件开发中,API已成为数据交互的重要节点,安全性很重要。Postman凭借友好的界面和强大的脚本功能,能帮助我们系统性地检测API中的常见漏洞。


Postman在安全测试中的优势

Postman作为一款流行的API开发工具,在安全测试领域同样表现出色,主要优势是:

可视化操作:无需编写复杂代码即可构建和发送各类攻击载荷。

环境管理:安全地管理敏感数据如密钥、Token,避免硬编码。

自动化测试:通过Collection Runner和Newman实现批量、持续的安全测试。

灵活脚本:支持JavaScript编写预请求脚本和测试断言,扩展安全检测能力。

生态集成:可和专业安全工具(如Burp Suite、ZAP)配合,形成完整测试链条。


安全测试环境配置

1. 基础安全配置

正确的配置是安全测试的基础,能有效防止测试过程中的信息泄露:

强制HTTPS传输:在Settings → General中开启"Always use HTTPS"选项,保证所有请求通过加密通道传输。

敏感信息管理:

使用环境变量存储API密钥、令牌等敏感数据,避免在请求中硬编码。

禁用"Save sensitive data"选项,防止敏感信息被意外保存。

集合权限控制:对于团队协作,将敏感测试集合设置为"Private",仅授权必要成员访问。


2. 测试环境隔离

为避免对生产系统造成影响,安全测试应在独立的环境中进行:

使用专门的测试服务器或容器化环境。

准备测试专用的账户体系,避免使用生产账户。

明确测试时间窗口,获得合法授权。

主要API漏洞检测


1. 认证和授权漏洞检测

认证授权是API安全的第一道防线,Postman可有效测试强度:

令牌有效性验证:

修改有效Token的个别字符,尝试访问受保护端点,验证是否返回401 Unauthorized。

测试Token过期时间,使用pm.test脚本检查Token是否在有效期内。


javascript

// 检查Token是否即将过期

pm.test("Token not expired", function() {

    const jsonData = pm.response.json();

    const expireTime = jsonData.expires_in;

    pm.expect(expireTime).to.be.above(0);

});


越权访问测试:

水平越权:使用普通用户A的Token尝试访问用户B的资源,如GET /api/v1/users/B/profile。

垂直越权:使用普通用户Token尝试访问管理员接口,如POST /api/admin/users,验证是否返回403 Forbidden。

参数污染技术:对同一参数提交多个值,观察系统行为:GET /api/v1/data?user_id=YOUR_ID&user_id=ANOTHER_ID。


认证绕过尝试:

省略Authorization头或发送空值,测试是否可未授权访问。

修改请求方法,如将POST改为PUT,测试权限控制是否完整。


2. 注入攻击检测

注入漏洞允许攻击者执行未授权命令,Postman可模拟各类注入攻击:


SQL注入:

在参数中插入恶意载荷:' OR '1'='1' --。

尝试联合查询:' UNION SELECT username, password FROM users --。

测试延时注入:'; WAITFOR DELAY '0:0:5' --,观察响应时间。


NoSQL注入:

针对MongoDB的运算符注入:{"$ne": "invalid_password"}。

数组注入:{"user": {"$in": ["admin", "test"]}}。


跨站脚本攻击:

在输入字段中插入脚本标签:<script>alert('XSS')</script>。

测试事件处理器:" onmouseover="alert('XSS')"。

验证输出是否被正确转义,检查响应中是否包含原始恶意代码。


3. 其他安全漏洞检测

数据过度暴露:

检查API响应是否包含不必要的敏感字段(如密码、密钥)。

使用测试脚本自动验证:


javascript

pm.test("No sensitive data in response", function() {

    const jsonData = pm.response.json();

    pm.expect(jsonData).to.not.have.property('password');

    pm.expect(jsonData).to.not.have.property('credit_card');

    pm.expect(jsonData).to.not.have.property('api_key');

});


安全头检测:

验证关键安全头是否设置:


javascript

pm.test("Security headers present", function() {

    pm.expect(pm.response.headers.get('Content-Security-Policy')).to.not.be.undefined;

    pm.expect(pm.response.headers.get('X-XSS-Protection')).to.equal('1; mode=block');

    pm.expect(pm.response.headers.get('Strict-Transport-Security')).to.not.be.undefined;

});


CSRF防护测试:

构造恶意POST请求,不携带CSRF Token,验证是否被拒绝。

检查响应头是否包含CSRF相关令牌。


错误处理测试:

发送非法请求,检查响应是否泄露堆栈跟踪、数据库错误信息等敏感内容。

验证错误响应是否统一、通用。


测试流程和自动化


1. 系统化测试流程

为保证测试覆盖面,建议按照以下流程:

信息收集:通过API文档、前端代码分析等方式识别所有端点。

端点分类:按功能、敏感度对API端点进行分类,确定测试优先级。

测试用例设计:针对每类漏洞设计具体测试用例,形成结构化Collection。

执行和记录:运行测试并详细记录请求/响应数据。

结果分析:分析漏洞危害程度及修复优先级。


2. 自动化安全测试

Postman支持多种自动化测试方式,提高安全测试效率:

集合运行:将安全测试用例组织为Collection,使用Collection Runner批量执行。

Newman集成:通过命令行工具Newman集成到CI/CD流程:


bash

newman run security_tests.json -e production_env.json --reporters cli,html


监控脚本:编写复杂测试逻辑,如JWT弱签名检测:


javascript

// JWT签名算法检测

pm.test("JWT uses strong algorithm", function() {

    const token = pm.response.json().access_token;

    const decoded = jwt_decode(token);

    pm.expect(decoded.alg).to.not.oneOf(['HS256', 'none']);

});


和他工具集成

虽然Postman功能强大,但和专业安全工具集成可形成更全面的测试方案:

Burp Suite集成:配置Postman使用Burp作为代理,将请求转发至Burp进行深度扫描。

OWASP ZAP联动:类似地,可将请求转发至ZAP,利用主动扫描能力。

Fortify WebInspect:导入Postman集合到WebInspect,执行企业级安全扫描。


文章标签: API自动化测试 API接口测试 API测试 API安全测试 测试平台 测试工具
咨询软件测试