Symfony 2使用IP保护登录

时间:2015-11-11 15:08:54

标签: security symfony yaml blocking access-control

我有一个防火墙规则,它与注释一起只允许作为特定用户访问操作。

此外,我希望阻止任何登录,如果它不是来自某个网​​络。在搜索解决方案后,我在guide之后遇到了其他access_control规则。

问题在于,如果我通过IP规则限制我的登录页面。如果有人试图访问它,我总是会收到ERR_TOO_MANY_REDIRECTS错误。我宁愿爱有一个" Page not Found"消息甚至没有让外界的人知道可以有任何登录。

如何使用Symfony执行此操作?

security.yml:

security:
    ...

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        default:
            form_login:
                provider: fos_userbundle
                login_path: /login
                use_forward: false
            logout:       true
            anonymous:    true

    access_control:
        - { path: ^/logout$, role: ROLE_ADMIN }
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https, ips: [127.0.0.1, fe80::1, ::1]}
        - { path: ^/login$, roles: ROLE_NO_ACCESS }
        - { path: ^/admin, role: ROLE_ADMIN, requires_channel: https}

1 个答案:

答案 0 :(得分:1)

如果我没有弄错,Symfony在这里所做的就是尝试将用户的角色与路径所需的角色相匹配。 如果它与其中一个角色不匹配,则会将用户发送到登录页面。

问题是,登录页面是用户刚刚来自的地方。因此,用户进入无限循环,因为他们的条件永远无法满足。

我建议将登录页面本身放在防火墙之外,只需将IP检查放在LOGIN页面的代码中,如果不满足,则转储到防火墙内的其他地方。