【问题标题】:Disable CSRF on specific firewall在特定防火墙上禁用 CSRF
【发布时间】:2016-02-29 20:19:08
【问题描述】:

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

  • 用树枝正常
  • 通过 FOSRestBundle 实现 RESTFull - 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/ 发送 POST 请求时,服务器返回错误:

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

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

【问题讨论】:

    标签: php symfony oauth csrf


    【解决方案1】:

    您可以根据用户来处理:

    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
    

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 2016-12-17
      • 2017-03-25
      • 2015-06-24
      相关资源
      最近更新 更多