chrome 不再支持iframe 攜帶cookie 訪問第三方站點


 

最近小伙伴說系統有一個跳轉第三方的功能有的人電腦端不好使了,我檢查了下自己的頁面,發現沒問題,於是一口答復:不管!!!(其實是卑微的說:那先在手機端試試吧。結果手機端正常,於是就先忙別的事情了)

 

今天不經意間點了下自己手機端的功能,發現手機端也不顯示了!!!然后再看電腦端也不好使了!!!吃了一驚之后趕緊開始偷偷解決bug,可不能讓領導知道我寫了bug!!!

 

但是最近這個功能沒改過啊,之前一直好好的,怎么突然就不行了呢?

 

這個功能是打開第三方的頁面,利用約定好的密鑰token等加載登錄者信息,為了讓用戶感覺不到是外部鏈接,特地嵌入進iframe加載顯示,如果直接瀏覽器地址訪問鏈接是成功的,換firefox瀏覽器原頁面也是沒問題的,所以首當其沖想到的就是chrome不支持iframe了嗎???

 

網上查了下資料,果然有重大發現!!!

 谷歌宣布將從7月14日發布的Chrome 84穩定版開始,重新恢復SameSite cookie策略,並且會逐步部署到Chrome 80以及以上的版本中。Chrome 80於今年2月份上線,谷歌就開始滾動推出SameSite更新,通過cookies的發送機制進行了一系列新的調整更好的維護用戶隱私和安全。今年4月份鑒於全球疫情的爆發,谷歌宣布暫時中止該更新,以便在疫情大流行期間保持重要網站的正常運行。

 也就是說chrome從7月14號開始推行這個設置,但是因為所有用戶不是同時更新或安裝,所以先更新的人就先表現出問題來了。

從Chrome 51開始,瀏覽器的Cookie新增加了一個SameSite屬性,用來防止CSRF攻擊和用戶追蹤。該設置當前默認是關閉的,但在Chrome 80之后,該功能默認已開啟。

CSRF攻擊和用戶追蹤是怎么回事?看看大神阮一峰的說明:http://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html

 

解決方案總結:(開發者使用方案3)

方案1、手動修改瀏覽器的設置,這是對普通用戶而言的,對開發者來說肯定不合適。

方案2、重新安裝低版本瀏覽器,傻瓜方案。。。

方案3、開發后端設定 Set-Cookie 為 SameSite=None; Secure(且可能要求必須為https方式)。

 

 前面說了因為該系統是嵌入的第三方的內容,短時間內要求對方添加該cookie設定來不及,而且對方為了防止CSRF也不一定會同意,所以只能暫時去掉iframe直接暴露第三方站點了。。希望有好的解決方案的童鞋評論區留下解決方案~~

 

 


 

 

以下兩項為查找資料過程中的相關知識,雖然使用場景不多,先記錄下來。

 

 chrome 瀏覽器默認禁止iframe 嵌套頁面下載文件:https://www.jianshu.com/p/789fd9fcd89d

出於沙盒安全性考慮,83版本的chrome瀏覽器默認禁止了iframe嵌套頁面通過a標簽的window.open,localtion.href點擊下載,
為了解決這個問題,可以在父頁面的iframe中sandbox="allow-downloads"進行解決,請不要使用allow-downloads-without-user-activation ( 允許在沒有征求用戶同意的情況下下載文件)
<iframe sandbox="allow-downloads"></iframe>

 

chrome 現已支持延遲加載網頁中的 iframe:https://news.cnblogs.com/n/668031,通過添加 loading="lazy"屬性。

<iframe src="https://example.com" loading="lazy" width="600" height="400"></iframe>

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM