Silex 2/Symfony:从安全登录表单检查 CSRF 令牌
Silex 2/Symfony: Check CSRF token from security login form
我不使用 "Form Service Provider" 并手动将 CSRF 令牌输出到我的 twig 登录表单:
$csrf_token = $app['csrf.token_manager']->getToken('token_id'); //'TOKEN'
并且在 login.html.twig 中:
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}">
手册 (https://silex.symfony.com/doc/2.0/providers/csrf.html) 说,可以这样检查令牌:
$app['csrf.token_manager']->isTokenValid(new CsrfToken('token_id', 'TOKEN'));
但是整个登录过程都是由安全组件处理的。如何向其中添加 CSRF 检查?
这是我的防火墙设置:
$app['security.firewalls'] = array(
'login' => array(
'pattern' => '^/user/login$',
),
'secured_area' => array(
'pattern' => '^.*$',
'anonymous' => false,
'remember_me' => array(),
'form' => array(
'login_path' => '/user/login',
'check_path' => '/user/login_check',
),
'logout' => array(
'logout_path' => '/user/logout',
'invalidate_session' => true
),
'users' => function () use ($app) {
return new UserProvider($app['db']);
},
));
以及登录控制器:
$app->get('/user/login', function(Request $request) use ($app) {
$csrf_token = $app['csrf.token_manager']->getToken('token_id'); //'TOKEN'
return $app['twig']->render('login.html.twig', array(
'csrf_token' => $csrf_token,
));
});
尝试向安全配置添加 csrf
选项:
$app['security.firewalls'] = array(
....
'form' => array(
'login_path' => '/user/login',
'check_path' => '/user/login_check',
'with_csrf' => true,
'csrf_parameter' => '_csrf_token', // form field name
'csrf_token_id' => 'token_id'
),
....
我不使用 "Form Service Provider" 并手动将 CSRF 令牌输出到我的 twig 登录表单:
$csrf_token = $app['csrf.token_manager']->getToken('token_id'); //'TOKEN'
并且在 login.html.twig 中:
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}">
手册 (https://silex.symfony.com/doc/2.0/providers/csrf.html) 说,可以这样检查令牌:
$app['csrf.token_manager']->isTokenValid(new CsrfToken('token_id', 'TOKEN'));
但是整个登录过程都是由安全组件处理的。如何向其中添加 CSRF 检查?
这是我的防火墙设置:
$app['security.firewalls'] = array(
'login' => array(
'pattern' => '^/user/login$',
),
'secured_area' => array(
'pattern' => '^.*$',
'anonymous' => false,
'remember_me' => array(),
'form' => array(
'login_path' => '/user/login',
'check_path' => '/user/login_check',
),
'logout' => array(
'logout_path' => '/user/logout',
'invalidate_session' => true
),
'users' => function () use ($app) {
return new UserProvider($app['db']);
},
));
以及登录控制器:
$app->get('/user/login', function(Request $request) use ($app) {
$csrf_token = $app['csrf.token_manager']->getToken('token_id'); //'TOKEN'
return $app['twig']->render('login.html.twig', array(
'csrf_token' => $csrf_token,
));
});
尝试向安全配置添加 csrf
选项:
$app['security.firewalls'] = array(
....
'form' => array(
'login_path' => '/user/login',
'check_path' => '/user/login_check',
'with_csrf' => true,
'csrf_parameter' => '_csrf_token', // form field name
'csrf_token_id' => 'token_id'
),
....