无法保护Symfony2中的匿名访问路由

时间:2014-06-10 22:34:21

标签: php security symfony access-control symfony-2.5

我无法理解为什么无用的用户可以访问我想要保护的路由“^ / nodes $”和“^ / destinations $”。

我哪里错了?我已经仔细阅读了这个资源http://symfony.com/doc/current/book/security.html,但无论如何,这些网址都可以通过匿名查看!

这是我的security.yml:

security:
    encoders:
    Symfony\Component\Security\Core\User\User: plaintext

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

providers:
    in_memory:
        memory:
            users:
                user:  { password: athena_user_2014, roles: [ 'ROLE_USER' ] }
                admin: { password: athenaspa2014, roles: [ 'ROLE_ADMIN' ] }

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

    secured_area:
        pattern:    ^/backend
        form_login:
            check_path: /backend/login_check
            login_path: /backend/login
            csrf_provider: form.csrf_provider
        logout:
            path:   /backend/logout
            target: /
        #http_basic:
        #    realm: "Secured Demo Area"

access_control:
    - { path: ^/nodes, roles: ROLE_ADMIN }
    - { path: ^/destinations, roles: ROLE_ADMIN }

1 个答案:

答案 0 :(得分:2)

您的路径不属于任何防火墙模式。您可以进行以下更改以使其正常工作:

firewalls:
    secured_area:
        pattern:   ^/
        ...
access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/backend, role: ROLE_ADMIN }
    - { path: ^/node, role: ROLE_ADMIN }
    ...
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }

最后一条路径是anonymous: true所做的。当没有其他访问控制匹配时,用户不需要登录。如果您想要更具限制性,可以像第一个路径^/login$那样指定哪些路由需要身份验证。请注意,使用了第一个匹配的路线,因此请注意您的订购方式。

或者您可以添加另一个防火墙。但请记住,每个防火墙都提供单独的登录。

您还可以使用php app/console router - 命令从控制台测试路线。如果您不确定如何使用它们,只需输入php app/console help router:match例如