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

tyb*_*103 13 sql-injection graphql

GraphQL最近发布,似乎鼓励在客户端编写查询.

  1. 是什么使得在客户端编写GraphQL查询安全,而不是SQL查询?
  2. GraphQL不受注射吗?
  3. 如果让客户端的查询非常有用,为什么不让SQL版本不受注入?

ahi*_*an3 14

由于在松弛频道中回复它的用户没有回答这个问题,我会发布他们的答案.

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

答案归功于来自GraphQL/#slav Slack聊天的查理samwgoldman.

  • 我想补充一点,GraphQL查询变量消除了"注入"问题的可能性.相近 "?" 在SQLite中,GraphQL查询变量允许您在查询中语义地放置变量,GraphQL将在运行查询之前验证变量的提供值是否有效. (3认同)