0

根據this article on MDN,使用postMessage將消息傳入和傳出chrome中的內容腳本是不安全的,因爲無法正確定義源屬性,並且targetOrigin難以安全地傳遞到潛在的惡意網站。這是否仍然如此。是否有其他方法來確認接收到的消息的來源,並且僅將消息發送給特定的內容腳本?或者有沒有其他方法可以完全使用內容腳本?來自Chrome擴展內容腳本的postMessage的安全性?可能的選擇?

回答

1

MDN文章中的「chrome」並不是指「Google Chrome」,而是指使用Chrome特權運行的擴展程序代碼(look here用於Firefox中其他含義的「chrome」)。

在Google Chrome/Chromium中,內容腳本在網頁中運行different environment(這意味着內容腳本中的window與網頁中的window不同)。
但是,當您從內容腳本向頁面發送消息時,event.source將與頁面的window相同。因此,要驗證該消息是否是從同一頁面中的(內容)腳本實際發送的,可以使用if (event.source === window) { ... }

如果你想發送消息到另一個內容腳本(在相同的標籤),那麼你有兩個選擇:

  1. 如果幀位於不同的起源,或者如果內容腳本位於在不同的選項卡中,則必須將消息發送到背景頁面,後者依次使用Chrome extension message passing API將消息傳遞到目標內容腳本。
  2. 如果通信幀位於相同的原點,則它們的變量可以直接共享,而無需使用消息傳遞API。請參閱使用topparent<HTMLIFrameElement>.contentWindowframes[index]

另一個(的hackish)的方式來獲得從一個內容腳本到另一個消息他們window對象是通過chrome.storage API。在接收端,綁定一個chrome.storage.onChanged事件。要「發送」消息,請使用chrome.storage.local.set。一旦有(未)收到消息,請不要忘記刪除鍵值對。

相關問題