GraphQL注入

GraphQL概述

GraphQL是一种查询语言,用于API设计和数据交互,不仅仅用于查询数据库。GraphQL 允许客户端在一个请求中明确地指定需要的数据,并返回预期的结果;并且将数据查询和数据修改分离开,大大增加灵活性。GraphQL正在迅猛发展,但也存在着一些安全问题。

GraphQL查询

GraphQL支持多种查询方式:Query、Mutation、Subscription、Input、Enum、Union、Interface

其中Query是GraphQL最常用的一种方式,用于从服务端获取数据,使用Query可以指定需要返回的字段以及过滤条件。

例如,请求服务器返回用户ID为1的用户名和电子邮件地址:

复制代码
query{
    user(id:1){
        name
        email
    }
}

Mutation用于在服务端修改或添加数据

例如,请求服务器将用户ID为1的用户名更改为name1:

复制代码
mutation{
    updateUserName(id:1,name:"name1"){
        id
        name
        email
    }
}

Subscription允许客户端通过WebSocket连接实时接收来自服务器的数据更新。比如可以应用于在线聊天等。

例如,订阅一个名为Message频道,并有消息时返回消息内容:

复制代码
subscription{
    Message(channel:"chat"){
        content
        author
    }
}

GraphQL注入利用

接口名称通常带有graphql字眼,查询语法是以query作为开头的。

存在GraphQL注入时,可以进行越权查询敏感数据等操作,比如ssrf利用。

比如,

复制代码
POST /graphql HTTP/1.1
Host: graphqlapp.herokuapp.com
Content-Type: application/json

{"query":
 "\n query 
IntrospectionQuery {\n 
__schema {\n queryType { 
name }\n mutationType { 
name }\n",
"variables":{
    "host":"test.com",
    "port":80
}
}

这里就可以利用ssrf。利用"host":"xx.dnslog.cn"

GraphQL注入防御建议

  • 限制查询的访问权限
  • 限制查询返回的字段和数据量
  • 检查输入参数的合法性
  • 限制查询语句的复杂性:GraphQL支持嵌套查询和参数化查询。
相关推荐
饕餮争锋1 小时前
设计模式笔记_行为型_访问者模式
笔记·设计模式·访问者模式
2301_801673013 小时前
8.19笔记
网络·安全
不羁。。3 小时前
【撸靶笔记】第七关:GET - Dump into outfile - String
数据库·笔记·oracle
好望角雾眠8 小时前
第一阶段C#基础-10:集合(Arraylist,list,Dictionary等)
笔记·学习·c#
zskj_zhyl10 小时前
家庭健康能量站:微高压氧舱结合艾灸机器人,智享双重养生SPA
人工智能·科技·安全·机器人
肥仔哥哥193010 小时前
安全设计-防止非法移机
安全·非法移机·自助机的安全设计·设备的安全设计
yatingliu201910 小时前
HiveQL | 个人学习笔记
hive·笔记·sql·学习
郭庆汝10 小时前
CMake概述用法详细笔记
笔记
张人玉10 小时前
XML 序列化与操作详解笔记
xml·前端·笔记
风和日丽 随波逐流10 小时前
java17学习笔记-Deprecate the Applet API for Removal
笔记·学习