fyre/ratelimiter

一个速率限制库。

v1.0 2024-08-18 05:29 UTC

This package is auto-updated.

Last update: 2024-09-18 05:44:16 UTC


README

FyreRateLimiter 是一个免费的、开源的 PHP 速率限制库。

目录

安装

使用 Composer

composer require fyre/ratelimiter

在 PHP 中

use Fyre\Security\RateLimiter;

速率限制器创建

  • $options 是一个数组,包含 RateLimiter 的选项。
    • cacheConfig 是一个字符串,表示 Cache 的配置键,默认为 "ratelimiter"。
    • limit 是一个数字,表示在周期内的最大请求数量,默认为 60
    • period 是一个数字,表示每个速率限制周期的秒数,默认为 60
    • message 是一个字符串,表示速率限制错误消息,默认为 "Rate limit exceeded"。
    • headers 是一个包含速率限制头的数组。
      • limit 是一个字符串,表示速率限制头,默认为 "X-RateLimit-Limit"。
      • remaining 是一个字符串,表示剩余速率限制头,默认为 "X-RateLimit-Remaining"。
      • reset 是一个字符串,表示重置速率限制头,默认为 "X-RateLimit-Reset"。
    • identifier 是一个接受 ServerRequest 作为第一个参数的 Closure,应该返回一个表示客户端标识符的字符串。
    • skipCheck 是一个接受 ServerRequest 作为第一个参数的 Closure,可以返回 true 以跳过对请求的速率限制检查。
    • errorResponse 是一个接受 ServerRequestClientResponse 作为参数的 Closure,应该返回一个 ClientResponse
$limiter = new RateLimiter($options);

如果省略了 identifier 回调,它将默认使用 $_SERVER['REMOTE_ADDR']

如果省略了 errorResponse 回调,它将默认协商包含 message 选项的 json 或纯文本响应。

方法

添加头

ClientResponse 添加速率限制头。

$response = $limiter->addHeaders($response);

检查限制

检查速率限制。

$result = $limiter->checkLimit($request);

错误响应

生成错误响应。

$response = $limiter->errorResponse($request);

中间件

use Fyre\Security\Middleware\RateLimiterMiddleware;
  • $options 是一个数组,包含 RateLimiter 的选项。
    • cacheConfig 是一个字符串,表示 Cache 的配置键,默认为 "ratelimiter"。
    • limit 是一个数字,表示在周期内的最大请求数量,默认为 60
    • period 是一个数字,表示每个速率限制周期的秒数,默认为 60
    • message 是一个字符串,表示速率限制错误消息,默认为 "Rate limit exceeded"。
    • headers 是一个包含速率限制头的数组。
      • limit 是一个字符串,表示速率限制头,默认为 "X-RateLimit-Limit"。
      • remaining 是一个字符串,表示剩余速率限制头,默认为 "X-RateLimit-Remaining"。
      • reset 是一个字符串,表示重置速率限制头,默认为 "X-RateLimit-Reset"。
    • identifier 是一个接受 ServerRequest 作为第一个参数的 Closure,应该返回一个表示客户端标识符的字符串。
    • skipCheck 是一个接受 ServerRequest 作为第一个参数的 Closure,可以返回 true 以跳过对请求的速率限制检查。
    • errorResponse 是一个接受 ServerRequestClientResponse 作为参数的 Closure,应该返回一个 ClientResponse
$middleware = new RateLimiterMiddleware($options);

如果省略了 identifier 回调,它将默认使用 $_SERVER['REMOTE_ADDR']

如果省略了 errorResponse 回调,它将默认协商包含 message 选项的 json 或纯文本响应。

处理

$response = $middleware->process($request, $handler);

此方法将返回一个 ClientResponse