adbario / slim-csrf
Slim 3 框架的 CSRF 防护
1.1.0
2017-04-06 08:32 UTC
Requires
- php: >=5.5
- adbario/slim-secure-session-middleware: ~1.3.1
- slim/slim: ~3.0
This package is auto-updated.
Last update: 2024-09-11 14:53:35 UTC
README
在 Slim 3 框架 中提供 CSRF 防护。使用 Slim Secure Session Middleware 来管理会话,并自动为 Twig-View 和 PHP-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; };