phputil / csrf
phputil/router 的 CSRF 中间件
v0.2.1
2024-07-09 20:36 UTC
Requires (Dev)
- captainhook/captainhook: ^5.23
- friendsofphp/php-cs-fixer: ^3.59
- kahlan/kahlan: ^5.2
- phpstan/phpstan: ^1.9
- phputil/restage: ^0.4.1
- phputil/router: ^0.3.0
- symfony/http-client: ^5.4
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
接口。