根據this article on MDN,使用postMessage將消息傳入和傳出chrome中的內容腳本是不安全的,因爲無法正確定義源屬性,並且targetOrigin難以安全地傳遞到潛在的惡意網站。這是否仍然如此。是否有其他方法來確認接收到的消息的來源,並且僅將消息發送給特定的內容腳本?或者有沒有其他方法可以完全使用內容腳本?來自Chrome擴展內容腳本的postMessage的安全性?可能的選擇?
0
A
回答
1
MDN文章中的「chrome」並不是指「Google Chrome」,而是指使用Chrome特權運行的擴展程序代碼(look here用於Firefox中其他含義的「chrome」)。
在Google Chrome/Chromium中,內容腳本在網頁中運行different environment(這意味着內容腳本中的window
與網頁中的window
不同)。
但是,當您從內容腳本向頁面發送消息時,event.source
將與頁面的window
相同。因此,要驗證該消息是否是從同一頁面中的(內容)腳本實際發送的,可以使用if (event.source === window) { ... }
。
如果你想發送消息到另一個內容腳本(在相同的標籤),那麼你有兩個選擇:
- 如果幀位於不同的起源,或者如果內容腳本位於在不同的選項卡中,則必須將消息發送到背景頁面,後者依次使用Chrome extension message passing API將消息傳遞到目標內容腳本。
- 如果通信幀位於相同的原點,則它們的變量可以直接共享,而無需使用消息傳遞API。請參閱使用
top
,parent
,<HTMLIFrameElement>.contentWindow
,frames[index]
等
另一個(的hackish)的方式來獲得從一個內容腳本到另一個消息他們window
對象是通過chrome.storage
API。在接收端,綁定一個chrome.storage.onChanged
事件。要「發送」消息,請使用chrome.storage.local.set
。一旦有(未)收到消息,請不要忘記刪除鍵值對。
相關問題
- 1. Chrome擴展內容腳本
- 2. 在Chrome擴展中傳遞來自內容腳本的郵件
- 3. Chrome擴展內容腳本中的JQueryUI
- 4. 內容腳本沒有迴應內容腳本的Chrome擴展
- 5. Chrome擴展內容安全策略
- 6. Chrome擴展,從內容安全策略
- 7. Chrome擴展程序自動更新選擇性腳本
- 8. Chrome擴展(內容腳本)緩存CSS
- 9. Chrome擴展引用/從內容腳本
- 10. 停止內容腳本在Chrome擴展
- 11. Chrome擴展 - 內容腳本點播
- 12. jQuery的:在Chrome瀏覽器擴展的內容腳本輸入選擇
- 13. 來自Chrome擴展中的內容腳本的未定義響應
- 14. Chrome擴展:內容腳本和網頁的腳本
- 15. 重定向到來自內容腳本的Chrome擴展程序URL?
- 16. Chrome擴展內容腳本訪問擴展框架
- 17. Chrome擴展:如何檢測是否使用內容腳本安裝了擴展
- 18. 如何使用Chrome擴展運行不安全的內容
- 19. Chrome擴展中的內容安全策略問題
- 20. 在擴展的Chrome DevTools和內容腳本之間的溝通
- 21. Chrome擴展內容腳本自定義UI
- 22. Chrome擴展:內容腳本 - >動態功能
- 23. 使用Chrome擴展內容腳本嵌入其他內容
- 24. 可以在內容腳本中使用`chrome。*`擴展API嗎?
- 25. Chrome擴展內容腳本可以訪問window.opener嗎?
- 26. Chrome擴展代碼和內容腳本vs注入腳本
- 27. 來自Chrome擴展的注入腳本中的跨域請求
- 28. Chrome擴展腳本
- 29. 內容腳本中的Chrome擴展程序storage.sync.set引發異常
- 30. 如何刷新Chrome擴展的內容腳本,如DOM更改