明智的默认值

主要观点:作者珍视“最少惊讶原则”和“提供合理默认值”,在 GraphQL 生态系统中发现很多违反这两个原则的情况,认为 GraphQL 默认是不安全的,存在信息泄露和拒绝服务等问题,同时介绍了使 GraphQL 端点默认安全的方法。
关键信息:

  • GraphQL 默认不安全,有多个信息泄露和拒绝服务的漏洞,如 CVE-2022-37734 等,一些实现缺少默认的请求体大小限制等。
  • 存在别名和指令重载等难以解决的问题,很多实现默认没有防护措施,一些流行框架虽有默认值但不完全。
  • 许多 GraphQL 实现默认启用模式内省,容易导致信息泄露,需明确禁止。
  • graphql/graphql-js为例,通过添加body-parser限制请求体大小,设置默认验证规则和maxToken值,添加graphql-armor包的规则等可使端点默认安全,类似 RedwoodJS 的配置。
    重要细节:
  • graphql-java中通过设置配置的最大令牌数(包括空格)来修复拒绝服务漏洞,但graphql/graphql-js默认未设置限制。
  • 一些 GraphQL 实现默认未设置请求体大小限制,如graphql-python/graphql-coreabsinthe-graphql/absinthe
  • graphql-armor包提供的规则可用于缓解多种安全问题,如设置exposeLimitsfalse防止泄露限制信息。
  • 最终的安全设置示例在mble/graphql-tirefire仓库中。
阅读 14
0 条评论