繁体   English   中英

symfony2的安全ESI问题

[英]Security ESI issue with symfony2

我在Symfony2 (2.2)上面临ESI的安全问题:

我的应用程序的某些ESI不需要记录并且是公共的,但是其他ESI要求用户被记录并具有ROLE_USER角色。

问题是,每个人都可以通过在导航器的地址栏中写下它来显示ESI ...所以一个人可以访问ESI(在一个需要管理员角色的动作中调用),甚至没有记录!

例如,我的ESI“SybioWebsiteBundle:Controller:showEsiAction”可以通过以下URL读取: http ://mywebsiteurl.com/_proxy ?_path = id%3D1%26slug%3Dlorem%26locale%3Dfr%26ranks%3D1-2-3 -5-6-7%26page%3D1%26isPhotograph%3D1%26_format%3Dhtml%26_controller%3DSybioWebsiteBundle%253AAlbum%253AshowEsi

只有已登录的用户才能看到这个ESI:他们去showAction,在Twig模板中,这个ESI被称为......但是由于这个“问题”,所有人都可以作弊和阅读!

我搜索了解决方案,我得到了一个非常丑陋:检查用户是否登录了ESI操作......没关系,但我正在使用HTTP缓存验证来优化我的网站加载(和内存)。 因此,如果我选择此解决方案,我需要添加一个测试用户角色的附加ETag,每次无用户访问ESI时清除ESI缓存,并显示空响应,如果记录了一个,则清除它再次显示正常视图等...

我现在想要作弊的人不常见,所以它可能是一个令人满意的解决方案......理论上,缓存不会因为它们而不断被清除,幸运的是!

但我想知道你是否有其他解决方案? 谢谢 !

<=2.1版本中,ESI URL来自导入internal.xml路由文件,该文件暴露了能够呈现任何控制器的常规Symfony路由。

如果普通用户有权访问它,他们可以在系统中呈现任何带有任何参数的控制器,这是您当前面临的问题。

>=2.2 ,internal.xml路由文件消失了。 您现在在config.yml有一个片段密钥。 而不是路由,这将激活监听器,该监听器/_proxy/_proxy开头的任何请求,这是ESI标签现在呈现的URL。

除了听众在内部使用一些技巧之外,这本身并没有帮助安全性。

那么是什么阻止恶意用户利用这个URL来使用任何参数呈现我们系统中的任何控制器? 2.2 ,有两种内置保护:可信代理和签名URL。

处理所有这些魔法的类称为FragmentListener 在它开始从您的应用程序提供任何内容之前,它首先检查请求的人是否“受信任”。

如果您正在使用像Varnish这样的反向代理,那么您需要将其IP地址或 - 超级极客的CIDR IP地址范围添加到您的config.yml文件中:

framework
    trusted_proxies:
        - 192.168.12.0

如果请求来自此IP或范围,则允许它。 而且,如果它来自本地地址,它也允许它。 换句话说,如果它是你信任的人,那就没关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM