在特定防火墙上禁用CSRF

时间:2016-02-29 11:06:43

标签: php symfony oauth csrf

我有应用程序,允许用户通过2个不同的渠道访问。

  • 正常用树枝
  • RESTFull通过FOSRestBundle - example.com/api/*地址

我启用了CSRF保护,因为我想在第一种情况下使用它。

framework:
    csrf_protection: true

但是......我需要在向/ api / *地址发送请求时禁用CSRF保护,因为在这种情况下我使用OAuth进行日志记录。

我可以为特定防火墙禁用CSRF保护吗?

我的防火墙:

firewalls:
    oauth_token:                                   
        pattern: ^/api/oauth/v2/token
        security: false
    api:
        pattern: ^/api/                            
        fos_oauth: true                            
        stateless: true                            
        anonymous: false                           
    main:
        pattern: ^/
        form_login:
            provider: chain_provider
            csrf_provider: form.csrf_provider
        logout:       true
        anonymous:    true

当我向/ api / server发送POST请求时返回错误:

  

CSRF令牌无效。请尝试重新提交表单。

我需要为api防火墙禁用此保护,并将其保留为main。有可能吗?

1 个答案:

答案 0 :(得分:2)

您可以在用户的​​基础上处理此问题:

http://symfony.com/doc/current/bundles/FOSRestBundle/2-the-view-layer.html#csrf-validation

  

构建应该通过HTML表单以及REST API处理表单的单个应用程序时,会遇到CSRF令牌验证问题。在大多数情况下,有必要为HTML表单启用它们,但将它们用于REST API是没有意义的。出于这个原因,有一个表单扩展来禁用具有特定角色的用户的CSRF验证。这当然要求REST API用户对自己进行身份验证并分配特殊角色。

fos_rest:
    disable_csrf_role: ROLE_API