resonantcore/anti-csrf

此包已被废弃,不再维护。作者建议使用paragonie/anti-csrf包。

Paragon Initiative的Anti-CSRF安全库

v2.3.0 2020-12-03 14:37 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:45:04 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_SimpleFunction(
        '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购买支持合同感兴趣。