2017-02-24 160 views
1

以下是從Mozilla的網站採取:是IndexedDB和同源策略

最喜歡的網絡存儲解決方案,是IndexedDB遵循同源策略。因此,雖然您可以訪問域中存儲的數據,但無法跨不同域訪問數據。

從理解來自Javascript的不同領域的同源策略。但我不明白這是如何適用於IndexedDB。我認爲IndexedDB只是一個數據庫,你可以隨心所欲地存儲它。 IndexedDB如何知道域名的任何內容,爲什麼它甚至會關心它是否知道?即使我設法從不同的域中檢索數據(這是可能的),我仍然可以將數據存儲在數據庫中。那麼這個領域與此有什麼關係?

我正在構建一個運行在Electron中的單頁網頁應用程序,並且可以訪問來自多個域的數據。我將把這些數據存儲在一個IndexedDB數據庫中。據推測,我只會有一個數據庫。目前還不清楚在這種情況下,同源政策會有什麼,如果有的話。

如果我的web應用程序不導航到一個url,但只使用XMLHttpRequest從後端服務檢索數據,那麼從技術上講沒有域。

回答

1

這種情況下的SOP是指正在訪問IndexedDB的腳本的來源。來自example.com/foo.js的腳本可以訪問example.com的IndexedDB,但來自evil.com/bar.js的腳本無法訪問它。更重要的是,您訪問的每個域都有一個不同的IndexedDB實例,本地存儲,會話存儲等。

此外,它不是無法將數據從evil.com寫入example.com的數據庫。這是關於來自evil.com的腳本訪問example.com的數據庫。所以瀏覽器不會標記數據的來源,而是腳本。這是有道理的,因爲它是問題的惡意腳本,而不是數據本身。

+0

但是,如果我的腳本作爲JavaScript文件嵌入到Web應用程序中,那麼沒有與該腳本相關聯的域。那麼IndexedDB如何處理? – user3176670

+0

我不知道電子用作應用程序中嵌入腳本的域。可能是本地主機或某些特定的東西。無論如何,如果您還在應用程序中加載了真實域中的腳本,並且Electron贊成SOP,那麼該腳本將無法訪問應用程序的數據。 –

+0

電子使用本地主機。 Electron贊成SOP,但這可以被禁用。由於我需要訪問來自不同域的數據,因此我將被要求禁用此功能,所以在這種情況下,我相信SOP對IndexedDB數據庫沒有任何影響。 – user3176670