Symfony IP访问控制配置不起作用

时间:2015-07-20 12:40:24

标签: symfony access-control

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

Symfony文档说这应该有用......

open file.xml ;
for //permission if xsh:matches(., ':signum$') delete . ;
save :b ;

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

所以我们使用了一个表达式,它起作用,但很丑陋,一旦我们有一个5个左右的IP列表,那就是笨拙的混乱......

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

任何人都有任何想法为什么文档(http://symfony.com/doc/current/cookbook/security/access_control.html#matching-access-control-by-ip)建议的漂亮干净方法不起作用?

2 个答案:

答案 0 :(得分:6)

您可能想再次阅读文档。 访问控制中的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

答案 1 :(得分:3)

您的访问规则仅匹配指定的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]}

在您引用的文档中对此进行了解释。