簡體   English   中英

帶有iframe的跨域localStorage(Chrome)

[英]Cross-domain localStorage with iframes (Chrome)

我正在嘗試使用iframe將值存儲在另一個域上(實際上,我正在使用http://xauth.org/info/上的xauth庫)。 但是,當我嘗試使用Chrome存儲任何內容時,它會返回“QUOTA_EXCEEDED_ERR:DOM Exception 22”,我將其視為訪問錯誤。 我在下面嘲笑了幾個非常簡單的頁面來復制效果:

文件1.html:

<html>
<head/>
<iframe src='http://127.0.0.1/2.html' />
</html>

文件2.html:

<html>
<head/>
<script>
console.log(localStorage);
localStorage.setItem('test', '123');
</script>
</html>

如果我將這兩個放在我的本地服務器上並訪問localhost / 1.html,它會嵌入127.0.0.1(Chrome認為是一個單獨的域)的框架,並且我得到與上面相同的訪問錯誤。 猜測,看起來即使我從另一個域嵌入iframe,並且iframe中的腳本正確引用該域的localStorage(我可以通過console.log(localStorage)行看到),權限寫入localStorage的內容來自首頁的域名。

簡而言之,似乎沒有iframe可以在Chrome中寫入localStorage。 有沒有人知道是否有辦法繞過這個特定的安全“功能”? 或者我做錯了什么?

那么, localStorage是基於域的,你的示例代碼沒有理由失敗。 它實際上做的是將test項設置為123為127.0.0.1,而它將使localhost localStorage空。

這可能不是您最初QUOTA_EXCEEDED_ERR問題的答案,但只是嘗試切換到Chrome上的隱私瀏覽(Ctrl + Shift + N)以查看您是否仍有錯誤。 如果沒有關於你最初做什么的更多信息,我不能說太多,但我相信配額超出意味着它意味着......

我認為Chrome的配額為2.5mb,與FF不同,后者有5mb的localStorage配額。

僅在禁用第三方cookie時才會出現此問題。 較新版本的Firefox和Opera也阻止了它。 在IE和Edge中,盡管禁用了第三方cookie,仍然可以使用它。 如果不在iframe中阻止localStorage,則網絡跟蹤器可以簡單地包含iframe,讀取cookie,將其發送到父腳本,然后將其發送到服務器。

IE和Edge沒有阻止這一點的原因是這些瀏覽器允許網站向服務器發送第三方cookie,這些cookie以前被設置為第一方cookie,盡管第三方cookie被阻止。 例如,如果用戶定期訪問Facebook,他會從Facebook獲取第一方Cookie。 當他隨后使用Facebook的分享按鈕訪問其他網站時,Facebook可以跟蹤他,雖然第三方cookie被禁用。 我真的不知道為什么IE和Edge不會阻止第三方cookie發送,但我還是不會使用這些瀏覽器。

禁用第三方Cookie時瀏覽器顯示的錯誤:

Chrome和Opera: Uncaught DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.

Firefox: SecurityError: The operation is insecure.

IE和Edge:沒有錯誤,雖然禁用了第三方cookie,但仍可以訪問iframe中的localStorage。

總而言之,不可能繞過這個安全功能(在Chrome,Firefox,Opera中),這樣可以確保用戶的隱私。

這是一個舊帖子,但如果其他人看到它 - 你可以使用postMessage

https://stackoverflow.com/a/40469196/4836581

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM