maer/csrf

PHP的一个小型CSRF包

1.1.0 2017-09-01 10:41 UTC

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();

注意

如果您有任何问题、建议或问题,请告诉我!

快乐编码!