codecollab / csrf-token
CodeCollab项目的CSRF令牌包
Requires
- php: ^7
Requires (Dev)
- phpunit/phpunit: ^5.4
This package is auto-updated.
Last update: 2024-09-06 09:24:41 UTC
README
CodeCollab项目的CSRF令牌包
需求
PHP7+
安装
使用composer将库包含到您的项目中
{
"require-dev": {
"codecollab/csrf-token": "^2"
}
}
用法
此库安全生成和验证CSRF令牌。要使用此库,只需创建一个新的\CodeCollab\CsrfToken\Token
实例。一个功能性的具体实现作为\CodeCollab\CsrfToken\Token\Handler
添加。
<?php $csrfToken = new \CodeCollab\CsrfToken\Token\Handler($storage, $generator); $theToken = $csrfToken->get(); // this will generate a new token if it doesn't exist yet var_dump($csrfToken->isValid($theToken)); // true var_dump($csrfToken->isValid('invalid token')); // false
要生成新的令牌(并使旧令牌失效),只需调用$csrfToken->generate()
。
<?php $csrfToken = new \CodeCollab\CsrfToken\Token\Handler($storage, $generator); $theToken = $csrfToken->get(); // this will generate a new token if it doesn't exist yet var_dump($csrfToken->isValid($theToken)); // true var_dump($csrfToken->isValid('invalid token')); // false $csrfToken->generate(); var_dump($csrfToken->isValid($theToken)); // false
存储
此库仅提供存储对象的接口,以便您可以使用任何您喜欢的存储。存储必须在请求之间持久令牌(例如会话)。一个示例原生会话存储实现可能如下所示
<?php declare(strict_types=1); use CodeCollab\CsrfToken\Storage\Storage; class Session implements Storage { public function exists(string $key): bool { return array_key_exists($key, $_SESSION); } public function get(string $key): string { return $_SESSION[$key]; } public function set(string $key, string $token) { $_SESSION[$key] = $token; } }
所有存储实现都必须实现CodeCollab\CsrfToken\Storage\Storage
。
生成器
生成器负责生成安全的令牌。默认情况下,包含CodeCollab\CsrfToken\Generator\RandomBytes32
生成器,它如名称所暗示,生成一个32字节长的随机令牌。
此生成器使用PHP的本地random_bytes()
函数生成令牌。当无法生成令牌时,将抛出CodeCollab\CsrfToken\Generator\InsufficientStrengthException
异常。生成器接口只有一个方法generate()
,用于生成令牌。
提供的生成器对于大多数情况都很好,但如果您需要额外的安全性,可以基于CodeCollab\CsrfToken\Storage\Storage
接口实现自己的生成器。
贡献
许可证
安全问题
如果您发现安全问题,请直接通过电子邮件联系,而不是使用codecollab-security@pieterhordijk.com的问题跟踪器。