我在Symfony2 (2.2)上遇到了ESI的安全问题:
例如,我的应用程序的某些 ESI 不需要登录并且是公开的,但其他 ESI 要求用户登录并具有角色 ROLE_USER。
问题是每个人都可以通过在导航器的地址栏中写入其 URL 来显示 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 缓存,并显示一个空响应,如果有记录,则清除它再次显示正常视图等...
我现在想作弊的人很少,所以这可能是一个令人满意的解决方案……理论上,缓存不会因为他们而被不断清除,幸运的是!
但我想知道您是否有其他解决方案?谢谢 !