gilbitron / easycsrf
一个简单独立的CSRF保护库
1.5.1
2021-12-27 14:29 UTC
Requires
- php: >=7.3
Requires (Dev)
- phpunit/phpunit: ^9
README
EasyCSRF
EasyCSRF是一个用PHP编写的简单独立的CSRF保护库。它可以用来保护你的表单免受跨站请求伪造攻击。
要求
- PHP 7.3+
安装
通过composer安装
composer require gilbitron/easycsrf
运行composer install
然后按常规使用
require 'vendor/autoload.php'; $sessionProvider = new EasyCSRF\NativeSessionProvider(); $easyCSRF = new EasyCSRF\EasyCSRF($sessionProvider);
使用方法
要使用EasyCSRF,首先你需要生成一个令牌
$sessionProvider = new EasyCSRF\NativeSessionProvider(); $easyCSRF = new EasyCSRF\EasyCSRF($sessionProvider); $token = $easyCSRF->generate('my_token');
然后,你需要在创建的任何表单中包含这个令牌
<form> ... <input type="hidden" name="token" value="<?php echo $token; ?>"> ... </form>
然后在处理任何数据之前,检查令牌是否有效
use EasyCSRF\Exceptions\InvalidCsrfTokenException; try { $easyCSRF->check('my_token', $_POST['token']); } catch(InvalidCsrfTokenException $e) { echo $e->getMessage(); }
令牌过期
你可以通过传递一个时间段(以秒为单位)到检查方法来为令牌设置时间限制。时间段之前的令牌将无效。
// Example 1 hour expiration $easyCSRF->check('my_token', $_POST['token'], 60 * 60);
可重复使用的令牌
令牌可以被设置为可重复使用的,而不仅仅是单次使用(对于ajax-heavy请求很有用)。
// Make token reusable $easyCSRF->check('my_token', $_POST['token'], null, true);
自定义SessionProvider
你的应用程序可能使用第三方库来管理会话,或者你可能希望将令牌存储在除$_SESSION之外的地方(如NativeSessionProvider所做的那样)。在这种情况下,你可以创建一个自定义的SessionProvider,并在实例化EasyCSRF时使用它。
<?php use EasyCSRF\Interfaces\SessionProvider; class CustomSessionProvider implements SessionProvider { /** * Get a session value. * * @param string $key * @return mixed */ public function get($key) { // Return your stored data } /** * Set a session value. * * @param string $key * @param mixed $value * @return void */ public function set($key, $value) { // Store your data } }
$sessionProvider = new CustomSessionProvider(); $easyCSRF = new EasyCSRF\EasyCSRF($sessionProvider);
致谢
EasyCSRF是由来自Dev7studios的Gilbert Pellegrom创建的。在MIT许可下发布。