API安全 | GraphQL API漏洞一览
字数 1206 2025-08-22 12:23:42
GraphQL API安全漏洞分析与防御指南
1. GraphQL API漏洞概述
GraphQL API的漏洞主要来源于实现和设计缺陷,常见问题包括:
- 内省功能未禁用导致信息泄露
- 恶意查询导致数据泄露
- 访问控制缺失导致权限提升
- CSRF攻击风险
- 不安全的直接对象引用(IDOR)
2. GraphQL端点发现技术
2.1 通用查询检测
发送以下查询可检测GraphQL端点:
query { __typename }
此查询有效是因为__typename是GraphQL的保留字段,返回被查询对象的类型。
2.2 常见端点路径
测试以下常见路径:
/graphql/api/api/graphql/graphql/api/graphql/graphql- 上述路径加
/v1后缀
2.3 请求方法测试
- 首选测试
application/json的POST请求 - 尝试GET请求
- 尝试
x-www-form-urlencoded的POST请求
3. GraphQL API初步测试
3.1 参数测试
检查未过滤的参数可能导致IDOR漏洞:
query {
product(id: 3) {
name
description
price
}
}
即使产品ID 3未在公共列表显示,仍可能通过直接查询获取信息。
4. GraphQL模式信息发现
4.1 内省查询
使用__schema字段获取模式信息:
query {
__schema {
types {
name
description
fields {
name
description
}
}
}
}
4.2 内省查询用途
- 发现所有可用查询和变异
- 获取类型和字段描述
- 了解API完整结构
- 发现潜在敏感信息
5. GraphQL常见攻击类型
5.1 恶意查询攻击
- 深度嵌套查询:导致服务器资源耗尽
- 批量查询:一次性获取大量数据
- 字段重复:通过重复请求相同字段消耗资源
5.2 权限提升攻击
- 通过修改查询获取管理员权限
- 利用CSRF漏洞执行未授权操作
5.3 信息泄露攻击
- 通过内省获取敏感模式信息
- 利用描述字段获取系统内部信息
6. GraphQL API安全防御措施
6.1 端点安全
- 禁用不必要的HTTP方法
- 仅允许
application/json内容类型 - 实现CSRF防护机制
6.2 查询防护
- 实现查询深度限制
- 设置查询复杂度限制
- 实施查询白名单
- 禁用内省功能在生产环境
6.3 访问控制
- 实施严格的权限验证
- 避免直接对象引用
- 实现基于角色的访问控制
6.4 日志与监控
- 记录所有GraphQL查询
- 监控异常查询模式
- 设置查询速率限制
7. 自动化测试工具
- Burp Suite:自动检测GraphQL端点
- GraphQL Cop:专门用于GraphQL安全测试
- InQL:Burp Suite的GraphQL测试扩展
8. 最佳实践建议
- 生产环境禁用内省功能
- 实施查询深度和复杂度限制
- 使用持久化查询替代动态查询
- 对所有操作实施严格的授权检查
- 定期进行安全审计和渗透测试
通过理解这些漏洞和防御措施,开发人员和安全测试人员可以更好地保护GraphQL API免受攻击,同时安全研究人员可以更有效地发现和报告安全问题。