如何在 Symfony 中创建 "catch-all" 防火墙?
How can I create a "catch-all" firewall in Symfony?
我们有一个仅对特定主机有效的 Symfony 防火墙。当用户向受此防火墙保护的页面发出请求时,我们正在捕获请求并执行正确的 approval/deny/ask 登录步骤。
大致看起来像这样(删除了一些位)并允许此防火墙使用我们的-domain.com 和直接子域。
main:
pattern: ^/.*
form_login: ...
anonymous: true
host: '^((([^.])+\.)?our-domain\.com)$'
guard: ...
但是,我们发现一个(厚颜无耻的)人偶尔会访问其中一个 URL,但访问的是不同的主机,例如IP 地址或不同的域。由于防火墙与该主机不匹配,我们得到以下异常:
The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL.
我们正在探索不同的方法来阻止对“不允许的”主机的请求,但我们尚未找到合适的答案。
一个似乎正确的选项是“拒绝所有”或“捕获所有其他”类型的防火墙 - 我们可以说“如果您不匹配任何其他防火墙,则将其视为不允许” .
有没有办法在 Symfony 中做到这一点?
如果你执行 bin/console debug:router
你会得到类似这样的输出:
Name Method Scheme Host Path
---------------- ------- ------- ----- --------------------------------------------
homepage ANY ANY ANY /
contact GET ANY ANY /contact
如您所见,默认情况下,所有 URI 都可以在您的网络服务器配置可访问的所有主机上访问。
如果你想将它们限制到给定的主机和 return 404,你可以在路由配置中使用 host
parameter。
为避免必须将参数添加到每个 @Route
注释,您可以通过 yaml 全局配置它:
# config/routes/annotations.yaml
controllers:
resource: '../../src/Controller/'
type: annotation
host: '^((([^.])+\.)?our-domain\.com)$'
我们有一个仅对特定主机有效的 Symfony 防火墙。当用户向受此防火墙保护的页面发出请求时,我们正在捕获请求并执行正确的 approval/deny/ask 登录步骤。
大致看起来像这样(删除了一些位)并允许此防火墙使用我们的-domain.com 和直接子域。
main:
pattern: ^/.*
form_login: ...
anonymous: true
host: '^((([^.])+\.)?our-domain\.com)$'
guard: ...
但是,我们发现一个(厚颜无耻的)人偶尔会访问其中一个 URL,但访问的是不同的主机,例如IP 地址或不同的域。由于防火墙与该主机不匹配,我们得到以下异常:
The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL.
我们正在探索不同的方法来阻止对“不允许的”主机的请求,但我们尚未找到合适的答案。
一个似乎正确的选项是“拒绝所有”或“捕获所有其他”类型的防火墙 - 我们可以说“如果您不匹配任何其他防火墙,则将其视为不允许” .
有没有办法在 Symfony 中做到这一点?
如果你执行 bin/console debug:router
你会得到类似这样的输出:
Name Method Scheme Host Path
---------------- ------- ------- ----- --------------------------------------------
homepage ANY ANY ANY /
contact GET ANY ANY /contact
如您所见,默认情况下,所有 URI 都可以在您的网络服务器配置可访问的所有主机上访问。
如果你想将它们限制到给定的主机和 return 404,你可以在路由配置中使用 host
parameter。
为避免必须将参数添加到每个 @Route
注释,您可以通过 yaml 全局配置它:
# config/routes/annotations.yaml
controllers:
resource: '../../src/Controller/'
type: annotation
host: '^((([^.])+\.)?our-domain\.com)$'