codecollab/csrf-token

CodeCollab项目的CSRF令牌包

2.0.0 2016-07-16 13:20 UTC

This package is auto-updated.

Last update: 2024-09-06 09:24:41 UTC


README

CodeCollab项目的CSRF令牌包

Build Status MIT License Latest Stable Version Total Downloads Latest Unstable Version

需求

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接口实现自己的生成器。

贡献

如何贡献

许可证

MIT

安全问题

如果您发现安全问题,请直接通过电子邮件联系,而不是使用codecollab-security@pieterhordijk.com的问题跟踪器。