网站界面一般用什么软件做,wordpress版本不一致如何更换空间,自己做店招的网站,菏泽正耀网站建设公司怎么样简介
判断GraphQL方式
判断一个网站是否使用了GraphQL API#xff0c;可以通过以下几种方法#xff1a;
1. 检查网络请求
查看请求端点
GraphQL 通常使用单一端点#xff0c;常见路径如#xff1a; /graphql/api/graphql/gql/query
观察请求特征
POST 请求为主可以通过以下几种方法
1. 检查网络请求
查看请求端点
GraphQL 通常使用单一端点常见路径如 /graphql/api/graphql/gql/query
观察请求特征
POST 请求为主虽然 GET 也可能请求体包含 query、variables、operationName 字段Content-Type 通常是 application/json
2. 分析请求/响应结构
请求体特征
{query: { user { id name email } },variables: {},operationName: GetUser
}响应结构
{data: {user: {id: 123,name: John,email: johnexample.com}},errors: []
}4. 使用浏览器开发者工具
打开 F12 开发者工具 切换到 Network 标签 执行网站操作观察 XHR/Fetch 请求 查找包含 GraphQL 特征的请求
内省查询
发送内省查询测试
{__schema {types {name}}
}通过综合使用这些方法你通常能够准确判断一个网站是否使用了 GraphQL API。最直接的方法是通过浏览器开发者工具观察网络请求的模式和内容。
Schema GraphQL Schema 是 GraphQL 中定义数据模型和 API 结构的核心概念它相当于数据的蓝图或契约明确规定了客户端可以执行的操作以及可访问的数据类型。 Schema 的本质作用是描述整个 API 的数据结构和操作能力就像数据库的架构图一样让客户端知道可以查询什么数据、如何查询以及数据之间的关系。 Schema 包含三种核心操作类型query查询操作用于读取数据、mutation变更操作用于修改数据和 subscription订阅操作用于实时数据监听。
type Book {
id: ID!
title: String!
author: String!
year: Int
}完整 Schema 的构成需要将业务数据类型如 Book与操作类型结合。Query 类型是必需的定义了所有可执行的查询操作Mutation 类型是可选的当需要修改数据时才定义Subscription 类型则根据是否需要实时功能来决定是否定义。
Type
基于您提供的内容我来整理总结 GraphQL Schema 中的 Type 系统
GraphQL Type 系统概述
GraphQL Schema 通过 Type类型 来实现数据模式的抽象描述。每个 Type 由多个 Field字段 组成而每个字段又指向特定的 Type形成了完整的类型关系网。
Type 的分类
GraphQL 中的 Type 主要分为六类Scalar、Object、Interface、Union、Enum、Input其中最重要的是前两种。
Scalar Type标量类型
标量类型是 GraphQL 的基础数据类型包括
String字符串类型Int整数类型Float浮点数类型Boolean布尔类型ID唯一标识符类型Enum枚举类型
非空标识字段后添加 ! 符号表示该字段不能为空必需字段。例如 ID!、String! 表示必需的 ID 和字符串字段。
除了内置标量类型还可以根据需要声明自定义标量类型。
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/。将内省查询的结果复制到箭头处即可。