yireo / magento2-graph-ql-rate-limiting
Magento 2 模块,用于向 GraphQL 资源添加速率限制
Requires
- php: 7.4.*
- magento/framework: ^100.1|^101.0|^102.0|^103.0
- magento/module-checkout: ^100.1
- magento/module-quote: ^100.1|^101.0
- sunspikes/php-ratelimiter: 1.2.1
Requires (Dev)
- ext/json: *
- laminas/laminas-http: *
- phpunit/phpunit: *
- yireo/magento2-integration-test-helper: @dev
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
- 添加集成测试
- 添加
MovingWindowSettings
和FixedWindowSettings
- 允许限制特定端点
- 确保回复为 HTTP/1.1 429 请求过多