gpt4 book ai didi

security - 如何在 Symfony 中手动管理 CRSV token ?

转载 作者:行者123 更新时间:2023-12-01 00:53:16 29 4
gpt4 key购买 nike

我正在尝试使用没有 FormType 的 CRSF token 管理。所以在 Twig 模板中,我只是用它来生成一个 token :

{{ csrf_token( inception_inscription ) }}

在 Controller 中,我正在尝试:
    $tokenManager = $this->get('security.csrf.token_manager');
$token = $request->get('token');
inception = $this->container->getParameter('crsf_inscription_inception');
if (!$tokenManager->isTokenValid($tokenManager->getToken($inception, $token))) {
throw new HttpException(400, 'Invalid token');
}

但实际上方法 isTokenValid 总是返回 true。我可以将 $token 强制为我想要的,它永远不会是假的,所以验证是无用的。

当我逐步调试时,我会遍历 Symfony\Component\Security\Csrf::getToken() 并且该方法正在测试: ($this->storage->hasToken($tokenId)) 总是返回 false 并且强制进程生成一个新的 token 。

我真的不明白它是如何工作的。
这是有关我的代码的矿石信息:
Symfony 2.6.x
framework:
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form:
csrf_protection:
enabled: true
field_name: token_my
csrf_protection:
enabled: true
validation: { enable_annotations: true }
templating:
engines: ['twig']
#assets_version: SomeVersionScheme
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
handler_id: ~
name: 'my'
fragments: ~
http_method_override: true

# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
globals:
inception_inscription: %crsf_inscription_inception%

最佳答案

据我了解, $tokenManager->getToken($tokenId) 总是会生成一个新的有效 token 。您可能会改为检查提供的 token ,例如:

$tokenManager = $this->get('security.csrf.token_manager');
$tokenId = $this->container->getParameter('crsf_inscription_inception');
$tokenValue = $request->get('token');
$token = new CsrfToken($tokenId, $tokenValue);
if (!$tokenManager->isTokenValid($token)) {
throw new HttpException(400, 'Invalid token');
}

关于security - 如何在 Symfony 中手动管理 CRSV token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29883155/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com