支付卡 REST API 安全 Top 5 风险测试用例
TOP5 具体测试用例,包括:
-
授权和认证绕过测试 -
速率限制和资源消耗测试 -
数据验证和注入测试 -
敏感数据暴露测试 -
功能级别RBAC测试
1. 授权和认证绕过测试
测试案例1:篡改JWT令牌
-
「请求示例」:
POST/api/paymentsHTTP/1.1
Host:api.example.com
Authorization:Bearer eyJhbGciOiJIUzI1NiIsIn
R5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibm
FtZSI6IkpvaGFuIjoiMTIzNDU2Nzg5MCIsImV4cCI6MTY
yNzYzNDQwMH0.55G3ZxR5EjJfF1sQ7YK3ZxR5EjJfF1sQ
7YK3ZxR5EjJfF1sQ7YK3ZxR5EjJfF1sQ7YK3
Content-Type:application/json
{
"cardNumber":"4111111111111111",
"expiryDate":"2025-12",
"cvv":"123",
"amount":100
} -
「篡改后的JWT」:将签名部分替换为无效签名。
Authorization:Bearer eyJhbGciOiJIUzI1Ni
IsInR5cCI6IkpXVCJ9eyJzdWIiOiIxMjM0NTY3ODkw
IiwibmFtZSI6IkpvaGFuIjoiMTIzNDU2Nzg5MCIsIm
V4cCI6MTYyNzYzNDQwMH0.invalid_signature -
「预期结果」:API应返回401 Unauthorized,并拒绝处理支付请求。
-
「成功标准」:API拒绝了篡改的JWT令牌,并返回了适当的错误信息。
测试案例2:省略认证头
-
「请求示例」:
POST/api/paymentsHTTP/1.1
Host:api.example.com
Content-Type:application/json
{
"cardNumber":"4111111111111111",
"expiryDate":"2025-12",
"cvv":"123",
"amount":100
} -
「预期结果」:API应返回401 Unauthorized,并拒绝处理支付请求。
-
「成功标准」:API拒绝了未认证的请求,并返回了适当的错误信息。
2. 速率限制和资源消耗测试
测试目标
验证API是否能够防止速率限制绕过和资源耗尽攻击。
测试案例1:高并发请求
-
「测试方法」:使用工具(如JMeter)发送大量并发请求。
-
「请求示例」:
POST/api/paymentsHTTP/1.1
Host:api.example.com
Authorization:Bearer <valid_token>
Content-Type:application/json
{
"cardNumber":"4111111111111111",
"expiryDate":"2025-12",
"cvv":"123",
"amount":100
} -
「预期结果」:API应在达到速率限制后返回429 Too Many Requests,并停止处理后续请求。
-
「成功标准」:API正确实施了速率限制,并返回了适当的错误信息。
测试案例2:资源耗尽
-
「测试方法」:发送大量无效请求,尝试耗尽服务器资源。
-
「请求示例」:
POST/api/paymentsHTTP/1.1
Host:api.example.com
Authorization:Bearer <invalid_token>
Content-Type:application/json
{
"cardNumber":"4111111111111111",
"expiryDate":"2025-12",
"cvv":"123",
"amount":100
} -
「预期结果」:API应在检测到资源耗尽时返回503 Service Unavailable,并限制后续请求。
-
「成功标准」:API能够检测并防御资源耗尽攻击。
3. 数据验证和注入测试
测试目标
验证API是否能够防止数据验证绕过和注入攻击。
测试案例1:SQL注入
-
「请求示例」:
POST/api/paymentsHTTP/1.1
Host:api.example.com
Authorization:Bearer <valid_token>
Content-Type:application/json
{
"cardNumber": "4111111111111111';
DROP TABLE payments;--",
"expiryDate":"2025-12",
"cvv":"123",
"amount":100
} -
「预期结果」:API应返回400 Bad Request,并拒绝处理支付请求。
-
「成功标准」:API正确识别并阻止了SQL注入攻击。
测试案例2:NoSQL注入
-
「请求示例」:
POST/api/paymentsHTTP/1.1
Host:api.example.com
Authorization:Bearer <valid_token>
Content-Type:application/json
{
"cardNumber":"{ $gt: '' }",
"expiryDate":"2025-12",
"cvv":"123",
"amount":100
} -
「预期结果」:API应返回400 Bad Request,并拒绝处理支付请求。
-
「成功标准」:API正确识别并阻止了NoSQL注入攻击。
4. 敏感数据暴露测试
测试目标
验证API是否能够防止敏感数据暴露。
测试案例1:响应数据泄露
-
「请求示例」:
GET/api/payments/123HTTP/1.1
Host:api.example.com
Authorization:Bearer <valid_token> -
「预期结果」:API返回的响应中不应包含完整的支付卡号,仅显示最后4位数字。
-
「成功标准」:API正确屏蔽了敏感数据,仅显示部分信息。
测试案例2:传输层安全
-
「测试方法」:使用未加密的HTTP请求访问API。
-
「请求示例」:
POSThttp://api.ex.com/api/paymentsHTTP/1.1
Host:api.example.com
Authorization:Bearer <valid_token>
Content-Type:application/json
{
"cardNumber":"4111111111111111",
"expiryDate":"2025-12",
"cvv":"123",
"amount":100
} -
「预期结果」:API应拒绝未加密的请求,并返回400 Bad Request。
-
「成功标准」:API强制使用HTTPS,并拒绝HTTP请求。
5. 功能级别RBAC测试
测试目标
验证API是否正确实现了基于角色的访问控制(RBAC)。
测试案例1:管理员角色访问
-
「请求示例」:
GET/api/admin/paymentsHTTP/1.1
Host:api.example.com
Authorization:Bearer <admin_token> -
「预期结果」:API返回200 OK,并显示所有支付记录。
-
「成功标准」:管理员角色能够访问所有支付记录。
测试案例2:普通用户角色访问
-
「请求示例」:
GET/api/admin/paymentsHTTP/1.1
Host:api.example.com
Authorization:Bearer <user_token> -
「预期结果」:API返回403 Forbidden,并拒绝访问。
-
「成功标准」:普通用户角色无法访问管理员功能。
测试案例3:角色提升攻击
-
「请求示例」:
POST/api/paymentsHTTP/1.1
Host:api.example.com
Authorization:Bearer <user_token>
Content-Type:application/json
{
"cardNumber":"4111111111111111",
"expiryDate":"2025-12",
"cvv":"123",
"amount":100
} -
「篡改后的JWT」:将用户角色从“user”篡改为“admin”。
Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR
5cCI6IkpXVCJ9eyJyb2xlIjoiYWRtaW4iLCJzdWIiOiIxM
jM0NTY3ODkwIiwibmFtZSI6IkpvaGFuIjoiMTIzNDU2Nzg
5MCIsImV4cCI6MTYyNzYzNDQwMH055G3ZxR5EjJfF1sQ7YK
3ZxR5EjJfF1sQ7YK3ZxR5EjJfF1sQ7YK3ZxR5EjJfF1sQ7YK3 -
「预期结果」:API返回403 Forbidden,并拒绝处理支付请求。
-
「成功标准」:API正确识别了篡改的JWT角色,并拒绝了请求。
原文始发于微信公众号(BurpSuite实战教程):支付卡 REST API 安全 Top 5 风险测试用例
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论