yireo/magento2-graph-ql-rate-limiting

Magento 2 模块,用于向 GraphQL 资源添加速率限制

0.0.5 2024-04-12 13:49 UTC

This package is auto-updated.

Last update: 2024-09-12 14:44:23 UTC


README

Magento 2 模块,用于向 GraphQL 资源添加速率限制

警告:截至目前,sunspikes/php-ratelimiter 库已不再维护。因此,此模块已停止使用,直到将其重构为使用其他速率限制工具。

此模块在 Magento 2 中实现了 sunspikes/php-ratelimiter。它检查特定客户端向 Magento 实例发送的 GraphQL 变更和/或 GraphQL 查询的数量,如果这些请求的数量超过配置的最大值,则生成 GraphQL 错误。

此模块特别建议用于限制变更,以防止您的 Magento 商店被用于创建会话、客户或其他数据的伪造请求淹没。通常,在无头环境中,变更的数量会受到限制。

使用方法

安装此扩展

composer require yireo/magento2-graph-ql-rate-limiting
bin/magento module:enable Yireo_GraphQlRateLimiting
bin/magento setup:upgrade

接下来,登录到 Magento 管理面板,导航到 商店配置,然后 Yireo > Yireo GraphQlRateLimiting > 设置,并根据需要修改设置。默认设置可能就足够好了。设置 启用限制变更 必须启用,否则此扩展有点无用。是否启用 限制查询 取决于您。设置 最大查询次数最大变更次数 指的是在连接被拒绝剩余时间之前,一定时间框架内可以执行的最大查询或变更次数(时间框架)。

最后,导航到 缓存管理 并启用缓存 GraphQL 速率限制

bin/magento cache:enable graphql_rate_limiting

测试是否工作

打开 GraphiQL 或其他客户端,创建以下简单的请求

query {
  products(filter: {name: {match: "jacket"}}) {
    items {
      sku
    }
  }
}

在此 Magento 模块中配置以下设置(在 商店配置 下)

  • 启用:
  • 限制查询:
  • 最大查询次数: 3

运行相同的查询三次后,应会弹出一个错误

{
  "errors": [
    {
      "message": "A maximum of 3 queries has been reached.",
      "extensions": {
        "category": "graphql"
      }
    }
  ]
}

缓存类型测试

此扩展向 Magento 缓存前端添加了一个缓存类型 GRAPHQL_RATE_LIMITING。要测试缓存类型是否正常工作,您可以运行以下功能测试

bin/magento cache:status
bin/magento cache:enable graphql_rate_limiting
vendor/bin/phpunit --bootstrap=app/bootstrap.php app/code/Yireo/GraphQlRateLimiting/Test/Functional/CacheTypeTest.php

其他功能测试

要运行其他功能测试,可以使用以下方法

bin/magento cache:enable graphql_rate_limiting
vendor/bin/phpunit --bootstrap=app/bootstrap.php app/code/Yireo/GraphQlRateLimiting/Test/Functional/

请注意,这将重置您的配置。不要在实时 Magento 网站上执行此操作。

待办事项

  • 使其与 PHP 8 兼容
  • 允许在 Redis 中保存数据
  • 检查 Adobe Commerce 使用什么来 backpressure-logger
  • 添加集成测试
  • 添加 MovingWindowSettingsFixedWindowSettings
  • 允许限制特定端点
  • 确保回复为 HTTP/1.1 429 请求过多