Symfony IP 访问控制配置不起作用
Symfony IP Access Control Configuration Not Working
我们需要通过 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 方法不起作用吗?
您的访问规则将只匹配指定的 IP。这意味着 Symfony 将继续匹配下一个规则,并且如果 none 的路径拒绝它,则将允许用户调用该路径。
您需要使用第二条规则明确禁止其他人访问:
- { path: ^/api/whatever, role: [ROLE_WHATEVER_API], ips: [ 1.2.3.4, 5.6.7.8 ] }
- { path: ^/api/whatever, role: [ROLE_NO_ACCESS]}
您引用的文档中对此进行了解释。
您可能想再次阅读文档。
访问控制中的 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。
我们需要通过 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 方法不起作用吗?
您的访问规则将只匹配指定的 IP。这意味着 Symfony 将继续匹配下一个规则,并且如果 none 的路径拒绝它,则将允许用户调用该路径。
您需要使用第二条规则明确禁止其他人访问:
- { path: ^/api/whatever, role: [ROLE_WHATEVER_API], ips: [ 1.2.3.4, 5.6.7.8 ] }
- { path: ^/api/whatever, role: [ROLE_NO_ACCESS]}
您引用的文档中对此进行了解释。
您可能想再次阅读文档。 访问控制中的 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。