简介

判断GraphQL方式

判断一个网站是否使用了GraphQL API,可以通过以下几种方法:

1. 检查网络请求

查看请求端点

  • GraphQL 通常使用单一端点,常见路径如:
    • /graphql
    • /api/graphql
    • /gql
    • /query

观察请求特征

  • POST 请求为主(虽然 GET 也可能)
  • 请求体包含 queryvariablesoperationName 字段
  • Content-Type 通常是 application/json

2. 分析请求/响应结构

请求体特征

{"query": "{ user { id name email } }","variables": {},"operationName": "GetUser"
}

响应结构

{"data": {"user": {"id": "123","name": "John","email": "john@example.com"}},"errors": []
}

在这里插入图片描述

4. 使用浏览器开发者工具

打开 F12 开发者工具
切换到 Network 标签
执行网站操作,观察 XHR/Fetch 请求
查找包含 GraphQL 特征的请求
在这里插入图片描述

内省查询

  • 发送内省查询测试:
{__schema {types {name}}
}

通过综合使用这些方法,你通常能够准确判断一个网站是否使用了 GraphQL API。最直接的方法是通过浏览器开发者工具观察网络请求的模式和内容。

Schema

  1. GraphQL Schema 是 GraphQL 中定义数据模型和 API 结构的核心概念,它相当于数据的蓝图或契约,明确规定了客户端可以执行的操作以及可访问的数据类型。

  2. Schema 的本质作用是描述整个 API 的数据结构和操作能力,就像数据库的架构图一样,让客户端知道可以查询什么数据、如何查询,以及数据之间的关系。

  3. Schema 包含三种核心操作类型:query(查询操作,用于读取数据)、mutation(变更操作,用于修改数据)和 subscription(订阅操作,用于实时数据监听)。

type Book {
id: ID!
title: String!
author: String!
year: Int
}
  1. 完整 Schema 的构成需要将业务数据类型(如 Book)与操作类型结合。Query 类型是必需的,定义了所有可执行的查询操作;Mutation 类型是可选的,当需要修改数据时才定义;Subscription 类型则根据是否需要实时功能来决定是否定义。

Type

基于您提供的内容,我来整理总结 GraphQL Schema 中的 Type 系统:

GraphQL Type 系统概述

GraphQL Schema 通过 Type(类型) 来实现数据模式的抽象描述。每个 Type 由多个 Field(字段) 组成,而每个字段又指向特定的 Type,形成了完整的类型关系网。

Type 的分类

GraphQL 中的 Type 主要分为六类:ScalarObjectInterfaceUnionEnumInput,其中最重要的是前两种。

  1. Scalar Type(标量类型)

标量类型是 GraphQL 的基础数据类型,包括:

  • String:字符串类型
  • Int:整数类型
  • Float:浮点数类型
  • Boolean:布尔类型
  • ID:唯一标识符类型
  • Enum:枚举类型

非空标识:字段后添加 ! 符号表示该字段不能为空(必需字段)。例如 ID!String! 表示必需的 ID 和字符串字段。

除了内置标量类型,还可以根据需要声明自定义标量类型。

  1. Object Type(对象类型)
    对象类型用于表达复杂的数据结构,由多个字段组成。例如:
type Book {id: ID!title: String!author: String!year: Int
}

这里 Book 就是一个对象类型,包含 4 个字段,每个字段都指向相应的类型。
3. 字段类型的灵活性

字段的类型不仅可以是标量类型,还可以是其他对象类型,这样可以建立对象之间的关联关系:

type User {id: IDname: String
}type Book {id: ID!title: String!author: User  # 这里使用了对象类型 User
}

通过这种方式,可以构建出层次化、关联性的复杂数据模型,实现数据之间的引用和组合关系。

Operations

GraphQL 规范中主要包括三种操作类型,分别是:Query(查询,用于从服务器查询数据)、Mutation(变更,用于操作服务器上数据,包括:添加、修改、删除等)、Subscription(订阅),这三者也被称为root operation type,名为根操作类型。
虽然定义了Book类型,但是这个类型不能直接被访问和操作,需要通过规范中的 Query、Mutation、Subscription 三个根操作类型来实现,且这三个根操作类型需要显式的被定义,无法直接使用。

Introspection

Introspection(内省)是 GraphQL 的内置功能,是用于查询服务端已定义好的 Schema 有关的信息,且在内省系统中还内置了很多元数据类型,包括:__schema、__type、__typeKind、__field、__inputValue、__enumValue、__directive。
由于在真实环境中是无法知道目标 GraphQL Schema 所支持的查询类型和字段名,但可以通过内省查询来获取这些信息(类似于 Swagger API 说明文档)。除此之外,内省查询还会泄漏一些敏感信息,所以在真实环境中,记得禁用内省查询。
也可以直接通过 BurpSuite 内置的功能来进行内省查询。
在这里插入图片描述
在这里插入图片描述
如果目标禁用内省查询,可以通过工具 Clairvoyance 来进行自动化收集 API 信息。

Vulnerability

1.端点探测

通用端点名称
GraphQL 服务通常使用类似的端点后缀。测试 GraphQL 端点时,您应该尝试将通用查询发送到以下位置:
/graphql
/api
/api/graphql
/graphql/api
/graphql/graphql
在找到 GraphQL 端点后,可以通过简单的测试来探测目标是否使用 GraphQL 服务,请求类型为application/json,如果没有正确的回显,可以尝试不同的请求的方式以及不同的请求类型。

{“query”: “{}”}
{“query”: “{__schema}”}
{“query”: “{__typename}”}
{“query”: “{__schema{types{name}}}”}
{“query”: “{__schema{queryType{name}}}”}
{“query”: “{__schema{types{name,fields{name}}}}”}

或者直接使用burpsuite自带得GraphQL或者插件InQL
在这里插入图片描述

2. Info Gathering

由于在真实环境中是无法知道目标 GraphQL Schema 所支持的查询类型和字段名,但可以通过内省查询来获取这些信息(类似于 Swagger API 说明文档)。除此之外,内省查询还会泄漏一些敏感信息,所以在真实环境中,记得禁用内省查询。
在这里插入图片描述
内省查询的结果往往很长而难以处理,可以使用 graphql-voyager 来可视化 Schema 实体之间的关联。可通过在线网站来实现,地址:https://graphql-kit.com/graphql-voyager/。将内省查询的结果复制到箭头处即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912029.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912029.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912029.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐C++题目练习网站

LeetCode LeetCode是一个全球知名的编程练习平台,提供大量C题目,涵盖数据结构、算法、系统设计等。题目难度从简单到困难,适合不同水平的学习者。平台支持在线编写代码并即时运行测试,提供详细的题目讨论区和官方解答。 Codeforc…

Spring Cloud 微服务(服务注册与发现原理深度解析)

📌 摘要 在微服务架构中,服务注册与发现是整个系统运行的基础核心模块。它决定了服务如何被定位、调用和管理。 本文将深入讲解 Spring Cloud 中 Eureka 的服务注册与发现机制,从底层原理到源码分析,再到实际开发中的最佳实践&a…

【Linux 设备模型框架 kobject 和 kset】

Linux 设备模型框架 kobject 和 kset 一、Linux 设备模型概述二、kobject 与 kset 的核心概念1. kobject2. kset3. 关键数据结构 三、kobject 与 kset 的实现源码四、源码解析与使用说明1. kset 的创建与初始化2. kobject 的创建与属性3. sysfs 属性操作4. 用户空间访问示例 五…

一起学前端之HTML------(1)HTML 介绍

HTML 介绍 HTML 即超文本标记语言(HyperText Markup Language),它是构成网页的基础技术之一。HTML 借助各种标签(Tag)对网页的结构与内容加以描述。下面为你介绍其核心要点: 关键特性 标签结构&#xff…

整体迁移法迁移 Docker 镜像

docker添加了新的镜像数据盘,数据盘迁移步骤 使用整体迁移法迁移 Docker 镜像后,可以在确认迁移成功且新数据盘正常使用后,删除旧数据目录来释放空间1。 # 停止 Docker 服务 sudo systemctl stop docker # 停止 socket 监听器 sudo systemct…

智能IDE+高效数据采集,让数据获取接近0门槛

亮数据也有了自己的官方账号,大家可以关注:https://brightdata.blog.csdn.net/ 现在正有福利,有兴趣的伙伴可以访问链接: https://www.bright.cn/products/web-scraper/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_jhx…

GNSS位移监测站在大坝安全中的用处

一、实时监测大坝变形 整体位移监测 GNSS(全球导航卫星系统)位移监测站能够实时、连续地获取大坝在三维空间中的位置信息,包括水平位移和垂直位移。大坝在长期运行过程中,受到水压力、温度变化、地基沉降等多种因素的影响&#x…

数字图像处理(一):从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么

数字图像处理(一) 一、什么是图像:图像就是多维数组图像的存储每一个格子有自己的颜色、深浅如何访问图像:1.对于RGB图像,共有R/G/B三个通道,通过代码来看。图像有单通道和多通道之分,访问时只需…

关于汉语和英语哪个更先进、历史更久的争论

引言:热议背后的思考​ ​ 在全球化浪潮的推动下,英语作为国际通用语言,在世界范围内广泛传播,其在国际商务、科技交流、学术研究等领域占据着重要地位。而汉语,作为世界上使用人口最多的语言之一,承载着…

在不联网的情况下,从可以联网的计算机上拷贝过来的程序报错:nu1301 无法加载源,https://api.nuget.org/v3/index.json

解决方法: 在联网的计算机上,找到nuget文件,拷贝到,不能联网的计算机的相应位置 设置加载这个nuget包,把nuget.org取消。 注意如果出现好多包都不能加载,可能是框架版本的问题,修改框架版本&am…

TCP 状态流程及原理详解:从连接建立到性能优化

一、TCP 协议概述与核心价值 TCP(Transmission Control Protocol,传输控制协议)是互联网协议栈中的核心协议之一,为网络通信提供可靠的、面向连接的数据传输服务。在当今复杂多变的网络环境中,深入理解 TCP 协议的状态…

【STM32 学习笔记】PWR电源控制

在电子设备中,待机(Standby)和睡眠(Sleep)是两种不同的省电模式。 1. 待机模式(Standby Mode):在待机模式下,设备仍然保持一定程度的活动,但大部分功能处于暂…

TCP 重传机制详解:原理、变体与故障排查应用

一、TCP 重传机制基础原理 1.1 可靠传输的核心保障 TCP(Transmission Control Protocol,传输控制协议)作为互联网中最常用的传输层协议,其核心特性之一是提供可靠的数据传输服务。在不可靠的网络环境中,数据包可能会…

Linux-HTTP服务和APACHE-学习笔记

序 欠10年前自己的一份笔记,献给今后的自己。 Internet Internet与中国 Internet最早来源于美国国防部高级研究计划局ARPA建立的ARPANet,1969年投入运行。1983年,ARPAnet分裂为两部分:ARPAnet和纯军事用的MILNET。当年1月&…

GitHub 趋势日报 (2025年06月26日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 716 free-for-dev 677 Self-Hosting-Guide 618 Best-websites-a-programmer-shoul…

利用TACCO将单细胞注释transfer至空间组

目录 环境导入 关键函数定义 运行前设定 数据准备 正式运行与保存 可视化与概率调整 偶然发现的一个好用的transfer方法,计算效率相当高,解了我的燃眉之急hh 原方法来自由以色列耶路撒冷希伯来大学的Mor Nitzan、美国麻省理工学院-哈佛大学博德研…

在反向代理环境下精准获取客户端真实 IP 的最佳实践

目录 1 背景 2 常见误区 3 X-Forwarded-For 解析规则 4 real_ip() 函数 —— 一行代码落地 5 与框架方法的协同 6 Nginx 端最小配置 7 生产落地 checklist 8 常见 Q&A 9 总结 在反向代理环境下精准获取客户端真实 IP 的最佳实践 — 基于自定义 real_ip() 函数的完…

华为云Flexus+DeepSeek征文|基于Dify构建抓取金融新闻并发送邮箱工作流

华为云FlexusDeepSeek征文|基于Dify构建抓取金融新闻并发送邮箱工作流 一、构建抓取金融新闻并发送邮箱工作流前言二、构建抓取金融新闻并发送邮箱工作流环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建抓取金融新闻并发送邮箱工作流实战…

疲劳检测与行为分析:工厂智能化实践

视觉分析算法赋能工厂疲劳与安全管理 一、背景与需求 在制造业中,疲劳作业是导致安全事故和效率下降的核心因素之一。传统人工巡检存在覆盖面不足、响应滞后等问题,而基于视觉分析的智能监控系统通过多算法协同,可实现全天候、高精度的疲劳…

医院信息化建设的要点

随着医疗技术的不断发展和患者需求的日益多样化,医院信息化建设已经成为提高医疗质量和效率的必要手段。医院信息化建设是指通过信息技术手段对医院日常运营、管理和服务进行数字化、智能化和网络化的改造,以提高医疗服务水平和管理效率。在实施医院信息…