在Symfony中创建自定义唯一的csrf标记

时间:2014-02-27 16:53:26

标签: php symfony csrf

有谁知道如何在Symfony中创建唯一的CSRF_token?我在security.yml文件中使用了以下配置,并在表单中创建了默认的Symfony CSRF_token。

firewalls:
    login:
        pattern:  ^/demo/secured/login$
        security: false
    docova:
        pattern:     /.*
        form_login:
            login_path: %d.login_path%
            check_path: %d.check_path%
            csrf_provider: form.csrf_provider
            csrf_parameter: _csrf_token
            intention: My_Private_String
            default_target_path: %d.default_target_path%
            success_handler: myproject.security.authentication.success_handler
        logout:
            path:   /MyProject/logout
            target: /MyProject
        anonymous: true
        security: true
        docova: true

在我的登录文件中我有这个:

<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" />

欣赏它。

1 个答案:

答案 0 :(得分:1)

csrf令牌生成基于表单的名称和会话ID,因此csrf对于每个会话的每个表单都是唯一的,如果您想要为每个表单提供真正独特的内容,那么您需要基本上覆盖创建csrf的方法,并传入一个随机字符串来代替表单名称。然后,您需要保存该随机字符串并将其与会话ID匹配,以便在提交表单时验证csrf。