簡體   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