【问题标题】:GraphQL - limiting the number of subqueries to prevent Batching AttackGraphQL - 限制子查询的数量以防止批处理攻击
【发布时间】:2022-07-17 14:44:42
【问题描述】:

我想了解是否有一种机制可以限制 GraphQL 查询中的子查询数量,以减轻 GraphQL 批处理攻击。 (由于 GraphQL 批处理功能,每个 HTTP 请求可以发送多个突变请求)

例如。

{
    first: changeTheNumber(newNumber: 1) {
        theNumber
    }
    second: changeTheNumber(newNumber: 1) {
        theNumber
    }
    third: changeTheNumber(newNumber: 1) {
        theNumber
    }
}

我正在使用graphql-java-kickstart

【问题讨论】:

    标签: graphql graphql-java


    【解决方案1】:

    graphql-java 中有两个instrumentations 可以检查“深度”或“复杂性”或您的查询:

    第一个检查查询的深度(请求有多少级别),第二个计算字段。您可以配置预期的最大深度/复杂度,如果查询比您配置的数字更深/更复杂,它将被拒绝。 您可以自定义 MaxQueryComplexityInstrumentation 的行为,以便某些字段被视为比其他字段“更复杂”(例如,您可以说纯字符串字段不如处理时需要其自己的数据库请求的字段复杂)。

    Here is an example 在架构描述中使用自定义指令 (Complexity) 来确定字段的复杂性。

    如果您只想避免多次请求具体字段,您可以编写自己的Instrumentation 或在解析器函数中使用DataFetchingEnvironment 来计算当前查询中该字段的数量(@ 987654330@ 允许访问当前查询中包含的所有字段)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多