paragonie / anti-csrf
Paragon Initiative的Anti-CSRF安全库
v2.4.0
2024-05-08 16:57 UTC
Requires
- php: ^7|^8
- paragonie/constant_time_encoding: ^2|^3
Requires (Dev)
- phpunit/phpunit: ^6|^7|^8|^9
- vimeo/psalm: ^1|^3|^4
README
动机
目前还没有好的基于会话的CSRF预防库。好的意思是
- CSRF令牌可以限制为以下之一或全部
- 特定的会话
- 特定的HTTP URI
- 特定的IP地址(可选)
- 可以存储多个CSRF令牌
- CSRF令牌使用一次后即过期
- 对会话数据中存储的令牌数量设置上限
- 在我们的实现中,首先删除最旧的令牌
警告 - 不要在任何所有$_SESSION
数据都存储在客户端cookie中的项目中使用。这会迅速耗尽HTTP cookie的4KB存储上限。
在任何项目中使用
查看autoload.php
以获取SPL自动加载器。
与Twig模板一起使用
首先,添加一个如下的过滤器
use \ParagonIE\AntiCSRF\AntiCSRF; $twigEnv->addFunction( new \Twig\TwigFunction( 'form_token', function($lock_to = null) { static $csrf; if ($csrf === null) { $csrf = new AntiCSRF; } return $csrf->insertToken($lock_to, false); }, ['is_safe' => ['html']] ) );
然后,从您的模板中调用新创建的form_token函数。
<form action="/addUser.php" method="post"> {{ form_token("/addUser.php") }} {# ... the rest of your form here ... #} </form>
验证请求
$csrf = new \ParagonIE\AntiCSRF\AntiCSRF; if (!empty($_POST)) { if ($csrf->validateRequest()) { // Valid } else { // Log a CSRF attack attempt } }
支持合同
如果您的公司在其产品或服务中使用这个库,您可能对从Paragon Initiative Enterprises购买支持合同感兴趣。