博客 / 詳情

返回

window.name和postMessage跨域詳解

文章不易,請關注公眾號 毛毛蟲的小小蠟筆,多多支持,謝謝。

概念

window.name

1、在一個窗口還沒關閉之前,同一個窗口的所有頁面都共享同一個window.name。

這個窗口可理解為chrome瀏覽器的一個tab標籤頁面。另外,從一個頁面中跳轉到另一個頁面後,這些頁面都共享同一個window.name。

2、每個頁面都能讀和寫window.name。

這個可能就是安全問題的來源。

3、window.name在chrome上可存儲小於等於2MB的數據。

postMessage

可以安全地實現的跨源通信。

語法:
otherWindow.postMessage(message, targetOrigin, [transfer]);

事件:
window.addEventListener("message", receiveMessage, false);
message的屬性有:data, origin, source

安全問題比較

攻擊者頁面:A
受害者頁面:B

window.name的問題

1、可通過在A中嵌入B,實現在A獲取B的window.name的數據

2、如果B中存在eval執行window.name的代碼,則存在xss安全問題,因為在1的基礎上,A可修改window.name的數據,從而導致B出現xss問題

Demo

驗證問題1

A頁面地址:
http://localhost:3000/window....

B頁面地址:
http://localhost:3001/window....

效果如下截圖所示:
image.png



詳情 請查看:毛毛蟲的小小蠟筆

user avatar guizimo 頭像 tigerandflower 頭像 nihaojob 頭像 warn 頭像 codinger 頭像 dingxi 頭像 yaochujiadejianpan 頭像 2dian718 頭像 ke1992 頭像 lanting_5b3e2d74c64f1 頭像 viggoz 頭像
11 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.