【问题标题】:Symfony2 Secure by IP not workingSymfony2 通过 IP 保护不工作
【发布时间】:2013-10-03 23:57:24
【问题描述】:

在我的 Symfony 2.3.1 安全 YML 中,我有这一行。

security.yml

access_control:
    - { path: ^/mysecurearea, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 0.0.0.0 }

基于此: http://symfony.com/doc/current/book/security.html

我的印象是这条路线和路线都喜欢它,例如/mysecurearea/something 应该只能被来自 IP 0.0.0.0 的请求访问

问题是,我仍然可以访问它。

有什么想法吗?

【问题讨论】:

  • 您在尝试访问 mysecurearea 时是否已登录?
  • 没有。我弄清楚了问题所在,但我会等几天,看看是否有其他人提出答案。然后我可以通过将他们的答案标记为正确来给他们分数。
  • 您清除缓存了吗?你的防火墙部分有什么?
  • 缓存没问题。防火墙只有 /^ 的登录信息,但这不会影响对任何内容的访问。例如IS_AUTHENTICATED_ANONYMOUSLY 有权访问 /^

标签: security symfony yaml


【解决方案1】:

所以,我想做的就是阻止人们访问某个区域,除非他们拥有有效的 IP。我没有完全理解的是 access_control 只能赋予角色,而不是拒绝访问。 (事后看来是有道理的。)

    - { path: ^/mysecurearea, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 0.0.0.0 }
    - { path: ^/mysecurearea, roles: ROLE_NO_ACCESS }

所以为了实现我想要的,我需要添加上面的附加行。 ROLE_NO_ACCESS 实际上并不存在。您只需要在其中添加一些描述性的文本并注意有效的角色。由于它不是有效角色,请求者不能再访问该区域。 这有点像 hack,但就我的目的而言,它完美地完成了这项工作。

【讨论】:

  • 如果我使用这个解决方案,我总是会得到“ERR_TOO_MANY_REDIRECTS”,其中包含防火墙规则 (login_path: /login use_forward: false)。我能做什么?
  • 这表明他们被撞到的地方,该用户也无法访问。例如当 Symfony 无法匹配该区域时,它会将用户重定向/转发到登录页面。因此,如果它也无法匹配登录页面,那么它将进入无限循环。匿名用户是否可以访问登录页面?
  • 没有完整的登录应该只对某些IP地址是可能的。我怎样才能解决这个问题?如果从不允许的 IP 地址调用该登录名和所有受限制的内容,则显示“未找到”,其次,如果它是正确的 IP,则访问受限区域的人将被重定向到登录名,就像往常一样。
  • 根据我的评论发了new question
【解决方案2】:

我的 security.yml 有一些默认条目,不知何故导致它忽略 IP 规则。我没有任何登录功能,所以我的用例非常简单。

这是我在 Symfony 2.3.6 中为我工作的整个 security.yml:

security:
    firewalls:
        anonymous:
            anonymous: ~

    providers:
        in_memory:
            memory:

    access_control:
        - { path: ^/foo, roles: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] }
        - { path: ^/foo, roles: ROLE_NO_ACCESS }

只需更改 ^/foo 路径和 IP 列表即可。

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多