phputil/csrf

phputil/router 的 CSRF 中间件

v0.2.1 2024-07-09 20:36 UTC

This package is auto-updated.

Last update: 2024-09-09 21:08:37 UTC


README

🔌 phputil/router 的 CSRF 中间件 phputil/router

安装

需要 phputil/router v0.2.14+

composer require phputil/csrf

使用方法

默认选项

require_once 'vendor/autoload.php';
use phputil\router\Router;
use function phputil\crsf\crsf; // Step 1: Declare the namespace usage for the function.
$app = new Router();

$app->use( crsf() ); // Step 2: Invoke the function to use it as a middleware.

$app->get( '/', function( $req, $res ) {
    $res->send( 'Hello' );
} );
$app->listen();

文档

/**
 * Returns a CSRF middleware.
 *
 * @param array|CsrfOptions $options CSRF options.
 * @param CsrfStrategy $strategy Strategy. By default it uses a cookie-based strategy with default options.
 * @param CsrfStorage $storage Storage. By default it uses a session-based storage with default options.
 *
 * @return callable
 */
function csrf( $options = [], CsrfStrategy $strategy = null, CsrfStorage $storage = null ): callable;

参数 $options (数组,默认 [])可以有以下键

  • disableTokenMasking (布尔值,默认 false)表示是否禁用令牌掩码。
    • 注意:默认情况下,随机生成的令牌通过与随机密钥进行 XOR 运算然后转换为 base64 来进行掩码。
  • disableTokenRenewal (布尔值,默认 false)表示是否禁用令牌更新。
  • tokenLength (整数,默认 20)表示期望的令牌长度。请注意,这是 未掩码 的令牌长度。

可用策略

以下类可用

  • CookieBasedCsrfStrategy:使用 cookies 发送和接收 CSRF 令牌。这是默认策略。
    • 其构造函数接收两个参数,都是可选的
      • $strategyOptions (数组,默认 [])可以有以下键
        • "cookieName":CSRF cookie 的名称。默认为 csrf_token
      • $cookieOptions (数组,默认 [])可以有以下键
  • HeaderBasedCsrfStrategy:使用 HTTP 头部发送和接收 CSRF 令牌。
    • 其构造函数接收一个参数,$strategyOptions (数组,默认 []),是可选的,可以有以下键
      • "requestHeaderName":期望的请求头部。默认为 "X-CSRF-Token"
      • "responseHeaderName":生成的响应头部。默认为 "CSRF-Token"

注意:您可以创建自己的 CSRF 策略,通过实现 CsrfStrategy 接口。

可用存储

以下类可用

  • InSessionCsrfStorage:使用 PHP 的 $_SESSION 来存储 CSRF 令牌,以便稍后比较。
    • 其构造函数接收一个可选参数,$sessionKey (字符串),它是存储在 $_SESSION 变量中的键。默认为 csrf

注意:您可以创建自己的 CSRF 存储,通过实现 CsrfStorage 接口。

许可

MIT © Thiago Delgado Pinto