【问题标题】:Symfony IP Access Control Configuration Not WorkingSymfony IP 访问控制配置不工作
【发布时间】:2015-10-09 14:13:36
【问题描述】:

我们需要通过 IP 限制我们的部分应用程序,即使正在进行其他身份验证。腰带和牙套。

Symfony 文档说这应该可以工作...

- { path: ^/api/whatever, role: [ROLE_WHATEVER_API], ips: [ 1.2.3.4, 5.6.7.8 ] }

...但这似乎完全破坏了访问控制,所有请求都通过了。

所以我们改用了一个表达式,它有效,但很丑陋,一旦我们有一个大约 5 个 IP 的列表,就会变得很笨拙......

- { path: ^/api/whatever, allow_if: "('1.2.3.4' == request.getClientIp() or '5.6.7.8' == request.getClientIp()) and has_role('ROLE_WHATEVER_API')" }

有人知道为什么文档 (http://symfony.com/doc/current/cookbook/security/access_control.html#matching-access-control-by-ip) 建议的 nice clean 方法不起作用吗?

【问题讨论】:

    标签: symfony access-control


    【解决方案1】:

    您可能需要再次阅读文档。 访问控制中的 IP 有效,只是不像您的“allow_if”表达式那样工作。

    如果你希望它限制不是 1.2.3.4 和 5.6.7.8 的 IP,请执行以下操作:

    - { path: ^/api/whatever, role: [ROLE_WHATEVER_API], ips: [ 1.2.3.4, 5.6.7.8 ] }
    - { path: ^/api/whatever, role: [ROLE_NO_ACCESS] }
    

    这已覆盖here

    【讨论】:

    • 谢谢,在我看的地方覆盖了,但我误解了。
    【解决方案2】:

    您的访问规则将只匹配指定的 IP。这意味着 Symfony 将继续匹配下一个规则,并且如果没有任何路径拒绝它,则认为允许用户调用该路径。

    您需要使用第二条规则明确禁止他人访问:

    - { path: ^/api/whatever, role: [ROLE_WHATEVER_API], ips: [ 1.2.3.4, 5.6.7.8 ] }
    - { path: ^/api/whatever, role: [ROLE_NO_ACCESS]}
    

    您引用的文档中对此进行了说明。

    【讨论】:

    • 谢谢。 AntoineWDG 领先你一分钟,所以我接受了这个答案:-|
    • 哈哈!我实际上可以看到我的时间早了一分钟;)无论如何,我很高兴问题得到了解决。
    • 你说得对,昨天它不会让我接受答案,我会接受你的;-)
    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2020-02-16
    • 2018-02-05
    • 2019-01-15
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多