为什么写GraphQL查询客户端是安全的?

问题描述:

GraphQL最近发布了,它似乎鼓励编写你的查询客户端。为什么写GraphQL查询客户端是安全的?

  1. 这是什么让它安全地写入GraphQL查询客户端,而不是SQL查询?
  2. GraphQL无法注射?
  3. 如果让客户端查询非常有用,为什么不让SQL的版本无法注入呢?

由于在松弛频道中回答问题的用户没有回答,所以我会发布他们的答案。

  1. GraphQL查询根据为向客户端公开数据而明确构建的模式进行验证。 SQL不会验证您的查询与数据库架构结构以外的任何其他查询。
  2. 理论上讲,您的GraphQL端点具有某种安全性来验证用户可以在查询的起始点查询数据。一旦它们位于基于图表的模式中,权限是graphQL模式定义固有的,并且注入不会完成任何事情。
  3. 制作一个不受注入的SQL版本会涉及到GraphQL所做的一些相同的验证。允许所有请求的数据/突变的某种验证。正如聊天中所引用的,“注入不是SQL固有的问题”。

答案记查理samwgoldman从GraphQL /#一般斯莱克聊天。

+2

我会补充说GraphQL查询变量消除了“注入”问题的可能性。如同 ”?”在SQLite中,GraphQL查询变量允许您在查询中将语义上的变量放入查询中,并且在运行查询之前,GraphQL将验证所提供的变量值是否有效。 –

+0

在这里找到一篇关于GraphQL和安全/注入的好文章:https://mikewilliamson.wordpress.com/2016/09/15/graphql-and-security/ – joost