2017-08-07 116 views
0

我已閱讀了如何在使用window.postMessage()時避免安全問題 - 特別是MDN doc中的建議。關於window.postMessage()+ iframes +開發人員工具的安全問題

但是,由於所有預防性提示都是客戶端,我無法理解如何阻止不良操作者從簡單編輯更改其開發人員工具中的代碼。

這是我正在處理的情況。我有一個包含嵌入式iframe的頁面,並且我可以控制該iframe(它位於單獨的域上,但提供它的供應商允許我將自定義JavaScript放入iframe源)。父窗口和iframe將來回通信。

/** 
    window at https://firstgoodorigin.com 

    Receives message from iframe to indicate 
    its contents have loaded. 

    Once that message has been received, 
    send a message back to the iframe. 
*/ 
function handleMessage(message) { 
    if (message.origin === 'https://secondgoodorigin.com') { 
    // verify and sanitize what's in message.data 
    // (it'll be something like "loaded") 
    // if it's good, send a message back 
    message.source.postMessage('foo', 'https://secondgoodorigin.com'); 
    } 
} 

window.addEventListener('message', handleMessage, false); 


/** 
    iframe at https://secondgoodorigin.com 

    Tell parent window it has loaded. Once that happens 
    it will receive a message from the parent window, for 
    which we add an event listener. 
*/ 
window.addEventListener('load',() => { 
    window.parent.postMessage('loaded', https://firstgoodorigin.com); 
}); 

window.addEventListener('message', (message) => { 
    if (message.origin === 'https://firstgoodorigin.com') { 
    // verify and sanitize what's in message.data 
    // do stuff 
    } 
}); 

鑑於這兩個窗口源和iframe源將成爲別人的Web檢查內部編輯,什麼是從消除所有的驗證邏輯,並用惡意的東西取代它阻止他們?我在這裏錯過了什麼?

+0

要破解自己?一旦文件被瀏覽器下載,他們就可以在計算機上隨心所欲地做任何事情。 – Will

回答

0

正如Will在評論中提到的,如果瀏覽器中的任何代碼都可以由最終用戶編輯,如果他或她可能想要的話。鎖定後消息的要點是阻止第三個網站發佈不需要的消息。

如果用戶登錄到有問題的網站,然後加載惡意網站,該網站可能會將相關網站加載到iframe或彈出式窗口中,然後將未經授權的信息發佈到網站。