Symfony IP访问控制配置无效



我们需要通过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)建议的干净的方法不起作用吗?

您可能需要再阅读一下文档。IP在访问控制中工作,它只是不像你的"allow_if"表达式那样工作。

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

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

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

在你引用的文档中有解释

最新更新