最后更新于2023年5月17日星期三17:08:50 GMT

GraphQL是一种开源的数据查询和操作语言,可用于构建 应用程序编程接口. 自2012年Facebook首次推出并于2015年发布以来, GraphQL的受欢迎程度稳步增长. 一些人估计 到2025年, 超过50%的企业将在生产中使用GraphQL, 而2021年这一比例还不到10%.

与Rest api不同, 哪些返回从端点调用的信息,并要求用户提取适用的信息, GraphQL允许用户从GraphQL模式查询特定的数据并返回精确的结果.

尽管GraphQL相对较新,并且允许您查询所需的内容, 它仍然容易出现与其他api相同的常见漏洞. 攻击者可以利用这些弱点来访问敏感数据, 这使得保护GraphQL非常重要. 扫描GraphQL模式的能力将有助于弥补这些弱点,并提供额外的API安全覆盖.


为什么GraphQL安全性很重要

虽然采用GraphQL有很多好处, 安全方面的影响还没有得到很好的理解. 功能会被滥用吗?? 查询灵活性会带来什么问题? 哪些漏洞可以被利用? 这些都是对其使用基础的关注.

在潜在的攻击向量方面,GraphQL与其他api也没有什么不同. Indeed, 除了您可能通过REST API遇到的安全漏洞之外,它还有自己独特的安全漏洞.

正如我们在最近的文章中所讨论的 API安全最佳实践, api是一个有利可图的目标,它可以让黑客进入原本安全的系统并利用漏洞. api不仅经常遭受与web应用程序相同的漏洞——比如访问控制被破坏, injections, 安全配置错误, 以及从其他依赖代码库继承的漏洞——但由于用户的自动化特性,它们也更容易受到资源消耗和速率限制问题的影响.

保护GraphQL的最佳实践

保护GraphQL端点的第一步是熟悉一些最常见的漏洞和最佳实践,以防止潜在的暴露. 最常见的是注入漏洞,例如 SQL注入、操作系统命令注入 服务器端请求伪造 -在GraphQL请求的参数中提供的数据被注入命令, queries, 和其他可执行实体由应用程序代码. 其他常见的漏洞包括缺乏资源管理  拒绝服务(DoS) 攻击,由于一般的图/查询的复杂性和潜在的大批量请求. Finally, 与其他应用程序和服务一样,GraphQL api中也存在破碎的访问控制漏洞, 但GraphQL查询解析器的分段特性可能会加剧这些问题.

有几个最佳实践建议可用于对抗此类攻击.

  • 只允许传递有效的值 -值应该通过允许列表、自定义验证器和正确的定义来控制.
  • 深度限制 -将查询的深度限制在预定的级别将允许控制查询的费用,并避免不必要地束缚你的后端.
  • 数量限制 -限制查询中特定对象的数量将通过不允许调用超过x个对象来减少查询的开销.
  • 查询成本分析 -在允许查询运行之前检查查询的开销是阻止昂贵或恶意查询的一个有用的附加步骤.
  • 控制输入抑制 -确保在拒绝输入时不会过度暴露API的信息.
  • 关闭自省功能 -默认, 将在GraphQL上启用自省, 但是简单地禁用自省将限制消费者可以访问的信息,并且不允许他们了解有关API的所有信息.

OWASP也产生了一个非常整洁的 小抄系列, 它介绍了GraphQL, 以及最佳实践和常见GraphQL攻击的详细概述, 帮助团队提升技能并确保GraphQL的安全.

如何保护GraphQL

保护GraphQL端点的第二步就是使用Rapid7! 几乎每个现代 DAST 解决方案可以正确解析和理解对web应用程序和web应用程序的请求和响应, 在大多数情况下, APIs, 但这并不意味着所有这些工具都能理解GraphQL. That’s why InsightAppSec 已经特别添加了对解析GraphQL请求的支持, responses, 和模式, 这样它就可以正确扫描基于graphql的api. 这个新特性为客户提供了扫描GraphQL端点的能力,从而识别并修复遇到的任何漏洞.

将提供初步支持以识别以下漏洞:

  • SQL注入
  • SQL盲注入
  • 操作系统命令
  • 服务器端请求伪造
  • 本地文件包含/远程文件包含  

要了解如何执行GraphQL扫描,请查看我们的 功能文档 在InsightAppSec中获取更多信息、支持和指导.