我們最近將一個 Web 應用程式升級到了 Django 4,它現在默認添加了一個
Cross-Origin-Opener-Policy: same-origin
http回應的標頭,這可能導致window.opener在null子視窗中。postMessage()這破壞了我們的一個頁面,其中我們有一個子視窗(用于 SSO 身份驗證)在完成其操作后向父視窗發送回訊息。
我知道我可以通過手動將該標題設定為unsafe-none或以不同的方式構造這些頁面等來解決此問題,但我很好奇子視窗可以訪問的潛在不安全之處是什么window.opener?
瀏覽器一直處于鎖定狀態,除了呼叫和其他一些小事之外window.opener,子視窗無能為力。postMessage()
既然被封了,不安全怎么辦? 有人可以舉一個例子來說明瀏覽器允許的子視窗可以做的破壞性事情嗎?window.opener
uj5u.com熱心網友回復:
這一點在 MDN 上關于noopener的頁面上有簡要說明,參考這篇博文。
直接參考這個博客:
TL;DR 如果設定了 window.opener,則無論安全來源如何,頁面都可以觸發打開器中的導航。
和
這是一個相對無害的示例,但它可以重定向到一個釣魚頁面,該頁面被設計為看起來像真正的 index.html,要求提供登錄憑據。用戶可能不會注意到這一點,因為焦點在新視窗中的惡意頁面上,而重定向發生在后臺。
您應該重新設計登錄流程,使其不需要不安全的標頭。特別是如果您接受來自用戶的任意鏈接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/460123.html
