【问题标题】:Why is it safe to write GraphQL queries client-side?为什么在客户端编写 GraphQL 查询是安全的?
【发布时间】:2015-11-24 08:59:52
【问题描述】:

GraphQL 最近发布,它似乎鼓励在客户端编写您的查询。

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

【问题讨论】:

    标签: sql-injection graphql


    【解决方案1】:

    由于在 slack 频道中回答的用户没有回答,我将发布他们的答案。

    1. GraphQL 查询根据明确构建的架构进行验证,以向客户端公开数据。 SQL 不会根据数据库架构结构以外的任何内容验证您的查询。
    2. 理论上,您的 GraphQL 端点有某种安全措施来验证用户是否可以在查询的起点查询数据。一旦它们进入基于 Graph 的架构中,权限就是 graphQL 架构定义所固有的,并且注入不会完成任何事情。
    3. 制作不受注入影响的 SQL 版本将涉及与 GraphQL 相同的一些验证。允许所有请求的数据/突变的某种验证。正如聊天中所引用的,“注入不是 SQL 固有的问题”。

    charliesamwgoldman 的答案来自 GraphQL/#general Slack 聊天。

    【讨论】:

    • 我要补充一点,GraphQL 查询变量消除了“注入”问题的可能性。相似 ”?”在 SQLite 中,GraphQL 查询变量允许您在查询中语义化地放置变量,GraphQL 将在运行查询之前验证为变量提供的值是否有效。
    • 在这里找到一篇关于 GraphQL 和安全/注入的好文章:mikewilliamson.wordpress.com/2016/09/15/graphql-and-security
    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 2020-06-14
    • 2018-02-18
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多