security - 在 Symfony2 中使用 https 重定向任何 url 上的循环

标签 security symfony https

无论我在何处尝试实现 https channel ,都会出现无限重定向循环。这是 security.yml 文件的样子:

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        main:
            pattern: .*
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
                check_path: /login_check
                login_path: /login
                default_target_path:  /home
            logout:
                path:   /logout
                target: /index
            security: true
            anonymous: true
            remember_me:
                key:      mySecret
                lifetime: 604800 #seven days
                path:     /
                domain:   ~

    access_control:
        - { path: ^/js, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/css, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/index*, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/.*, role: ROLE_ADMIN }
        - { path: ^/.*, roles: ROLE_USER }

例如,如果我将管理路径更改为:

- { path: ^/admin/.*, role: ROLE_ADMIN, requires_channel: https }

循环将会发生。 同样在 routing/entity.yml 中,我尝试了这样的事情:

entity_index:
  pattern: /
  defaults: { _controller: MyBundle:Entity:index }
  schemes: [https]

有人知道如何解决这个问题吗?

最佳答案

我遇到了同样的问题,因为服务器位于反向代理后面,反向代理通过 ssl 与客户端通信,但与运行应用程序的服务器通过 http 通信。我只使用这个,因为 RP 和 App Server 之间的连接是安全的,因为它不会离开内部网络。如果你真的确定你真的运行了 SSL 并且出现了这个问题,那么有一个丑陋的修复方法......但它确实是最后的手段并且使用你自己的风险:

您可以像这样在您的 app.php 中覆盖服务器变量:

$_SERVER['HTTPS'] = 'on'; 
$_SERVER['SERVER_PORT'] = 443;

同样,这是一个丑陋的修复程序,不是解决方案,仅在您承担唯一风险和责任的情况下使用,如果我的反向代理没有转发端口的问题并且不是100% 肯定我在客户端和 RP 之间有 SSL。别忘了,如果你没有真正运行有效的 ssl,这会让你容易受到攻击

关于security - 在 Symfony2 中使用 https 重定向任何 url 上的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20674567/

相关文章:

perl - 是否可以确定 Perl Mason 请求的 SSL/TLS 版本?

java - 可以用 sun.misc.unsafe 破坏安全管理器吗?

c++ - 创建加密安全密码。并验证它是否有效

Symfony2 在 cli 和 incron 中命令不同的行为

symfony - 如何将 sha1() 密码转换为 FOSUserBundle?

wordpress - 使用 .htaccess 将 HTTP 重定向到 HTTPs

java - 用于第三方集成的两种方式密码加密

c - 为什么 strtok() 被认为是不安全的?

php - Symfony .env 安全性

java - SAXBuilder 传递 HTTPS URL