漏洞赏金猎人笔记-GraphQL-I

渗透技巧 2年前 (2022) admin
522 0 0

GraphQL

为了方便理解,这里从一个例子出发来理解GraphQL

通常情况下,当你想获取有关书籍和作者的详细信息时,用REST API的风格写为:

/api/books
/api/authors

如果用GraphQL的话,写成如下:

query GetBooks {
books{
title
author
}
}

结果如下:

漏洞赏金猎人笔记-GraphQL-I

img.png

上面这个例子中:

query是一种操作类型,GetBooks是一个任意的操作名称(你自己起的名字).

也可以进行查询嵌套:(如下所示)

query GetBooks {
books{
title
author{
friends {
phoneNumber
}
}
}
}

如果后端有相关信息就可以查到信息

其他几个常见的基础知识

ARGUMENTS:

{
human(id: "1000") {
name
height
}
}

#
响应

{
"data": {
"human": {
"name": "Luke Skywalker",
"height": 1.72
}
}
}

这里的语法允许你对结果进行过滤。(查找id为1000的人的相关信息)

ALIASES:

{
empireHero: hero(episode: EMPIRE) {
name
}
jediHero: hero(episode: JEDI) {
name
}
}

#
响应
{
"data": {
"empireHero": {
"name": "Luke Skywalker"
},
"jediHero": {
"name": "R2-D2"
}
}
}

这里的语法允许你在响应的JSON中创建额外的字段。此处响应中两个字段中都有 “hero”。通过使用别名,可以将它们区分。实际上是 前缀+共有字段 的形式。

FRAGMENTS:

fragment NameParts on Person {
firstName
lastName
}

query GetPerson {
people(id: "7") {
...NameParts
avatar(size: LARGE)
}
}

#
注意:上面与下面是等价的
query GetPerson {
people(id: "7") {
firstName
lastName
avatar(size: LARGE)
}
}


类似于...xxx的形式就表示fragments,作用就是使得某一字段可以被复用,从而避免每次都输入同一组字段

VARIABLES(变量):


#
$episode: Episode -----> $变量:变量类型
query HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}

#
变量赋值
# "变量":"具体的值"
{
"episode": "JEDI"
}



#
响应
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{
"name": "Luke Skywalker"
},
{
"name": "Han Solo"
},
{
"name": "Leia Organa"
}
]
}
}
}

参考

https://www.apollographql.com/docs/react/data/fragments/

https://graphql.org/learn/queries/

https://www.youtube.com/watch?v=PQvux9OAaBE

以上为GraohQL基础知识,今天开个头,后面会继续


原文始发于微信公众号(迪哥讲事):漏洞赏金猎人笔记-GraphQL-I

版权声明:admin 发表于 2022年11月21日 上午5:37。
转载请注明:漏洞赏金猎人笔记-GraphQL-I | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...