我想我可能在使用长参数名称的Symfony 中发现了防火墙组件的严重问题。我发布它作为获得确认的问题。
拿这个parameters.yml
:
router.request_context.host: my.domain.com
domain: my.domain.com
在%domain%
中使用短片security.yml
时:
access_control:
- { host: admin.%domain%, path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { host: admin.%domain%, path: ^/, roles: IS_AUTHENTICATED_REMEMBERED }
一切按预期工作。生成的appProdProjectContainer.php
中的相关部分(为可重复性添加了返回值):
protected function getSecurity_Firewall_Map_Context_AdminService()
{
// ...
$h = new \Symfony\Component\HttpFoundation\RequestMatcher(
'^/login$', 'admin.my.domain.com'
);
$i = new \Symfony\Component\HttpFoundation\RequestMatcher(
'^/', 'admin.my.domain.com'
);
$j = new \Symfony\Component\Security\Http\AccessMap();
// ...
}
问题是,当您使用%router.request_context.host%
时,它会被转换为localhost,即您的防火墙不适用于生产网站。
请注意%router.request_context.host%
用于使用控制台命令发送邮件:在security.yml
中使用它可能会导致应用程序出现巨大的安全漏洞。