symfony如何检查控制器csrf [已关闭]

afdcj2ne  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(127)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

昨天关门了。
Improve this question
我正在接受symfony开发者培训,我不能使用csrf令牌。有人能从一开始就向我解释一切吗?请帮帮我
有没有人能从头给我解释一下?请帮帮我

csbfibhn

csbfibhn1#

CSRF是一种恶意用户试图让合法用户在不知不觉中提交他们不打算提交的数据的方法。您需要对重要或描述性操作实施CSRF保护。
如果你使用细枝和形状构件,除非你禁用它们,否则它们都是自动管理的; Symfony Form组件默认包含CSRF令牌,Symfony会自动检查这些令牌,因此您无需执行任何操作即可抵御CSRF攻击。
但是如果你不使用Symfony表单,你会对一些事情感兴趣:

手动生成csrf令牌文档

细枝函数

使用csrf_token()Twig函数在模板中生成一个CSRF令牌,并将其存储为隐藏表单字段:

<a href="{{ path('my_path', { my_csrf_token: csrf_token('my-token-identifier') }) }}">
    Click me
</a>

在控制器端,您需要检查令牌:

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
// ...

public function myAction(Request $request): Response
{
    $csrf = $request->request->get('my_csrf_token');

    if ($this->isCsrfTokenValid('my-token-identifier', $csrf)) {
        // ... do something, like deleting an object
    }
}

您也可以使用私有的CsrfTokenManager在php端生成令牌:

<?php
//
class MyClass {

public function __construct(
    private CsrfTokenManagerInterface $csrfTokenManager
) {}

public function someFunction()
{
    //
    $this->csrfTokenManager->getToken('my-token-identifier');

}

你还有更确切的问题吗?

相关问题