adbario/slim-csrf

Slim 3 框架的 CSRF 防护

1.1.0 2017-04-06 08:32 UTC

This package is auto-updated.

Last update: 2024-09-11 14:53:35 UTC


README

Slim 3 框架 中提供 CSRF 防护。使用 Slim Secure Session Middleware 来管理会话,并自动为 Twig-ViewPHP-View 创建 HTML 表单隐藏输入。

CSRF 防护将应用于 POST、PUT、DELETE 和 PATCH 请求。

安装

composer require adbario/slim-csrf

用法

依赖容器

将会话帮助器注入到应用程序容器中(了解更多关于会话帮助器 [链接]

$container['session'] = function ($container) {
    return new \Adbar\Session(
        $container->get('settings')['session']['namespace']
    );
};

在应用程序容器中注入 CSRF 防护

$container['csrf'] = function ($c) {
    return new \Adbar\Slim\Csrf($c->get('session'));
};

如果您使用 Twig-View 或 PHP-View

$container['csrf'] = function ($c) {
    return new \Adbar\Slim\Csrf(
        $c->get('session'),
        $c->get('view')
    );
};

其他依赖项

CSRF 防护需要 Slim Secure Session Middleware。为会话中间件注入设置并注册它 [链接]

$app->add(new \Adbar\SessionMiddleware($container->get('settings')['session']));

为所有路由注册

要在所有路由上使用 CSRF 防护,请在会话中间件之前注册它

/** Csrf */
$app->add($app->getContainer()->get('csrf'));

/** Session */
$app->add(new \Adbar\SessionMiddleware($container->get('settings')['session']));

按路由注册

要在特定路由上使用 CSRF 防护,请按如下方式添加

$app->get('/form', function ($request, $response) {
    // CSRF token will be added
    return $this->view->render($response, 'form.twig');
})->add($container->get('csrf'));

$app->post('/form', function ($request, $response) {
    // If CSRF token was valid, code after this will run
})->add($container->get('csrf'));

Twig-View

将自动注入可用的 HTML 表单隐藏输入到 Twig-View 中,以在视图中使用它

<form method="post">
    {{ csrf|raw }}
    Username
    <input type="text" name="username">
    <input type="submit" value="Send">
</form>

PHP-View

将自动注入可用的 HTML 表单隐藏输入到 Twig-View 中,以在视图中使用它

<form method="post">
    <?= $csrf ?>
    Username
    <input type="text" name="username">
    <input type="submit" value="Send">
</form>

其他模板引擎

您也可以轻松地在其他模板引擎上使用 CSRF 防护。无需视图注入到容器中

$container['csrf'] = function () {
    return new \Adbar\Slim\Csrf;
};

生成 HTML 隐藏输入字段

$app->get('/form', function ($request, $response) {
    // Generate form field
    $csrf = $this->csrf->generateForm();
    // Inject form field to your view...
});

CSRF 令牌失败时的自定义错误

默认情况下,CSRF 防护在失败时显示简单的消息

Invalid security token.

如果您需要渲染自定义模板,当 CSRF 令牌无效时编辑容器

$container['csrf'] = function ($c) {
    $csrf = new \Adbar\Slim\Csrf(
        $c->get('session'),
        $c->get('view')
    );
    $csrf->setTokenError(function ($request, $response, $next) use ($c) {
        return $c->view->render($response->withStatus(400), 'csrf_error.twig');
    });
    return $csrf;
};

如果您只想编辑简单消息

$container['csrf'] = function ($c) {
    $csrf = new \Adbar\Slim\Csrf(
        $c->get('session'),
        $c->get('view')
    );
    $csrf->setTokenErrorMessage('This is my custom error message.');
    return $csrf;
};

许可协议

MIT 许可协议