maer / csrf
PHP的一个小型CSRF包
1.1.0
2017-09-01 10:41 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 4.7.*
This package is auto-updated.
Last update: 2024-09-09 01:41:17 UTC
README
快速生成和验证令牌,以防止跨站请求伪造(CSRF)攻击。
重要:此包仅帮助您处理CSRF令牌。要真正免受CSRF攻击,您还需要保护自己免受跨站脚本(XSS)攻击。
安装
使用以下命令通过Git克隆或使用composer下载包
composer require maer/csrf 1.*
用法
包含composers的自动加载器,或手动包含src/
文件夹中的文件。(从CsrfInterface.php
文件开始)
创建一个新的实例
$csrf = new Maer\Security\Csrf\Csrf();
重要:您可以在应用程序中的任何时候创建一个新的实例,但在对其进行任何调用之前,您需要自己启动会话。此包不对您如何管理会话做任何假设(您可能使用:session_start()或使用Symfonys Session包等...)
方法1:手动添加隐藏字段
<form method="post" action="...">
<input type="hidden" name="csrftoken" value="<?= $csrf->getToken() ?>" />
...
</form>
方法2:生成隐藏字段
<form method="post" action="...">
<?= $csrf->getTokenField() ?>
...
</form>
验证
接收POST时
if ($csrf->validateToken($_POST['csrftoken'])) {
echo "Yay! It's a valid token!";
} else {
echo "Nope. That token isn't valid!";
}
附加功能
命名令牌
所有方法都接受可选的$name
参数。这使您可以在整个应用程序中拥有多个令牌。例如
$csrf->getToken();
$csrf->getToken('login-form');
$csrf->getToken('something-else');
上述代码将生成三个不同的令牌,getTokenField()
方法也是如此。
要验证命名令牌,请将名称作为validateToken()
方法的第二个参数
$csrf->validateToken($_POST['csrftoken'], 'login-form');
重新生成令牌
如果您想使现有令牌无效,请使用regenerateToken()
方法。此方法还返回新令牌,因此如果您想在表单加载时每次都有不同的令牌,则可以使用此方法而不是generateToken()
$token = $csrf->regenerateToken();
// or for a named token
$token = $csrf->regenerateToken('login-form');
重置/删除所有令牌
这将删除所有令牌,无论是命名的还是未命名的。
$csrf->resetAll();
注意
如果您有任何问题、建议或问题,请告诉我!
快乐编码!