paragonie/anti-csrf

Paragon Initiative的Anti-CSRF安全库

v2.4.0 2024-05-08 16:57 UTC

This package is auto-updated.

Last update: 2024-09-11 07:56:18 UTC


README

Build Status Latest Stable Version Latest Unstable Version License Downloads

动机

目前还没有好的基于会话的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购买支持合同感兴趣。