IT連携マップシステムどうしのデータ連携・接続仕様のまとめログイン

5 分で読む

ブラウザの保存先は、localStorage・sessionStorage・Cookie・IndexedDB・Cache Storage・オリジンプライベートファイルシステム(OPFS)の 6 種と、拡張機能だけが使う chrome.storage の 7 種です。「どれが安全か」は、何から守りたいのかで答えが変わります。IT連携マップ編集部は、Chrome 156・Edge 156・Safari 26.6.2 で同じ試験を各 3 回行い、3 回とも同じだった結果を 4 つの軸で比べました。XSS(クロスサイトスクリプティング)は、攻撃者が用意したスクリプトが、利用者が開いているページの中で動いてしまう弱点です。

結論は、保存先を変えても XSS は防げなかった、です。localStorage から IndexedDB に移しても、暗号化して置いても、同じページで動くスクリプトは読めました。守りになるのは、保存先の選び方より、攻撃者のスクリプトをページの中で動かさせないことでした。

ブラウザの保存先7種を4つの軸で比べた表(IT連携マップ編集部の測定・Chrome 156・macOS・各3回とも同じ結果)。XSSで読まれたのは、localStorage・sessionStorage・IndexedDB・Cache Storage・OPFSの5種と、通常のCookie。HttpOnlyのCookieは値を読めなかったが、使われた。chrome.storageはページのスクリプトにAPIが渡されず呼べなかった。入る量は、localStorageとsessionStorageが約5MiB(文字数)、Cookieが名前と値で約4KB、IndexedDB・Cache Storage・OPFSが約10GiB(この Mac での測定値)、chrome.storageのlocalが10MiB(unlimitedStorageの権限で上限なし)・sessionが10MiB・syncが100KiB。ディスクの上では、Cookieの値だけがOSの鍵で暗号化され、ほかは書いた文字列が平文で見つかり、chrome.storageのsessionだけは書かれなかった。閲覧データを削除すると、chrome.storage以外は消え、chrome.storageは消えなかった。
ブラウザの保存先7種を4つの軸で比べた表(IT連携マップ編集部の測定・Chrome 156・macOS・各3回とも同じ結果)。XSSで読まれたのは、localStorage・sessionStorage・IndexedDB・Cache Storage・OPFSの5種と、通常のCookie。HttpOnlyのCookieは値を読めなかったが、使われた。chrome.storageはページのスクリプトにAPIが渡されず呼べなかった。入る量は、localStorageとsessionStorageが約5MiB(文字数)、Cookieが名前と値で約4KB、IndexedDB・Cache Storage・OPFSが約10GiB(この Mac での測定値)、chrome.storageのlocalが10MiB(unlimitedStorageの権限で上限なし)・sessionが10MiB・syncが100KiB。ディスクの上では、Cookieの値だけがOSの鍵で暗号化され、ほかは書いた文字列が平文で見つかり、chrome.storageのsessionだけは書かれなかった。閲覧データを削除すると、chrome.storage以外は消え、chrome.storageは消えなかった。

7 種類の保存先は、何が違うのか?

保存先 使われ方 入る量 閉じたあと
localStorage 同じオリジンのページが文字列を保存する 約 520 万文字 残る
sessionStorage タブごとの文字列 約 520 万文字 消える
Cookie サーバーへ自動で送られる。ログインの印に使われる 1 つで約 4 KB 期限まで残る
IndexedDB 大量のデータを構造のまま保存する 10 GiB 残る
Cache Storage 通信の応答を保存する 10 GiB 残る
OPFS ページ専用のファイル置き場 10 GiB 残る
chrome.storage 拡張機能だけが使う(local・sync・session) local 10 MiB session は消える

入る量は Chrome・Edge での測定値です。では、XSS でスクリプトを動かされると、何が読まれたのでしょうか。

XSS では、何が読まれたのか?

同じページに入り込んだスクリプトが持ち出せたものを示す図(IT連携マップ編集部の測定・Chrome 156・3回とも同じ)。localStorage・sessionStorage・IndexedDB・Cache Storage・OPFSは、1つのスクリプトで中身を読めた。HttpOnlyを付けたCookieは値を読めなかったが、fetchでそのCookieを付けたリクエストを送れた。取り出せない設定の鍵で暗号化してlocalStorageに置いた値は、鍵を取り出せなくても、ページのスクリプトが復号できた。chrome.storageは、ページのスクリプトには拡張機能のAPIが渡されないため、呼べなかった。
同じページに入り込んだスクリプトが持ち出せたものを示す図(IT連携マップ編集部の測定・Chrome 156・3回とも同じ)。localStorage・sessionStorage・IndexedDB・Cache Storage・OPFSは、1つのスクリプトで中身を読めた。HttpOnlyを付けたCookieは値を読めなかったが、fetchでそのCookieを付けたリクエストを送れた。取り出せない設定の鍵で暗号化してlocalStorageに置いた値は、鍵を取り出せなくても、ページのスクリプトが復号できた。chrome.storageは、ページのスクリプトには拡張機能のAPIが渡されないため、呼べなかった。
  • 6 種は全部読めた: localStorage・sessionStorage・通常の Cookie・IndexedDB・Cache Storage・OPFS は、スクリプト 1 本で読めました。
  • 暗号化しても読めた: 取り出せない設定の鍵(extractable: false)で暗号化しても、スクリプトはページと同じ呼び出しで復号できました。
  • HttpOnly は値を守ったが、使われた: HttpOnly の Cookie は読めませんでしたが、fetch で、その Cookie を付けた要求を送れました。
    MDN(Set-Cookie header)原文
    a cookie that has been created with HttpOnly will still be sent with JavaScript-initiated requests

    出典を開く確認 2026-11-02

  • chrome.storage は呼べなかった: ページのスクリプトには、拡張機能の API が渡されないためです。

スクリプトはページと同じ権限で動くので、ページが使える手段は何でも使えます。では、呼べなかった chrome.storage は、ほかの誰から読めるのでしょうか。

拡張機能の chrome.storage は、誰から読めるのか?

拡張機能の保存先chrome.storageを、誰が読めたかを示す表(IT連携マップ編集部の測定・Chrome 156とEdge 156・各3回とも同じ)。Webページのスクリプトは、APIが渡されず、local・sync・sessionのどれも呼べなかった。同じ拡張機能のコンテンツスクリプトは、localとsyncを読め、sessionは既定では読めず、setAccessLevelで公開した後は読めた。別の拡張機能は、標的の拡張機能の保存先に届かなかった。ディスクの上では、localとsyncは平文で残り、sessionはメモリの中だけで書かれない。
拡張機能の保存先chrome.storageを、誰が読めたかを示す表(IT連携マップ編集部の測定・Chrome 156とEdge 156・各3回とも同じ)。Webページのスクリプトは、APIが渡されず、local・sync・sessionのどれも呼べなかった。同じ拡張機能のコンテンツスクリプトは、localとsyncを読め、sessionは既定では読めず、setAccessLevelで公開した後は読めた。別の拡張機能は、標的の拡張機能の保存先に届かなかった。ディスクの上では、localとsyncは平文で残り、sessionはメモリの中だけで書かれない。

同じ拡張機能のコンテンツ スクリプトは、local と sync を読めました。公式文書も、既定で公開されると説明しています。

Chrome for Developers(chrome.storage)原文
By default, it’s exposed to content scripts, but this behavior can be changed by calling browser.storage.local.setAccessLevel()

出典を開く確認 2026-11-02

session は既定では読めず、
Chrome for Developers(chrome.storage)原文
By default, it’s not exposed to content scripts, but this behavior can be changed by calling browser.storage.session.setAccessLevel()

出典を開く確認 2026-11-02

setAccessLevel で公開した後は読めました。別の拡張機能は、ページの localStorage は読めましたが、標的の拡張機能の保存先には届きませんでした。詳しくは拡張機能の保存先です。では、どれだけ入るのでしょうか。

どれだけ入るのか?

入る量を3つのブラウザで測った表(IT連携マップ編集部の測定・各3回とも同じ値)。localStorageの英数の文字数は、Chrome 156(macOS)・Edge 156(Windows 10)・Safari 26(macOS)とも5,242,674。全角の文字数は、ChromeとEdgeが5,242,674、Safariだけ半分の2,626,956。Cookieを400本設定して残った本数は、ChromeとEdgeが154本、Safariが400本。ページのquotaは、Chromeが10GiB(ディスク460GiB)、Edgeが10GiB(ディスク111GiB)、Safariが76.8GiB(ディスク460GiB)で、公式の説明のディスクの60%とは合わなかった。拡張機能のstorage.localは10MiBで、unlimitedStorageの権限があると128MiBまで書けた。
入る量を3つのブラウザで測った表(IT連携マップ編集部の測定・各3回とも同じ値)。localStorageの英数の文字数は、Chrome 156(macOS)・Edge 156(Windows 10)・Safari 26(macOS)とも5,242,674。全角の文字数は、ChromeとEdgeが5,242,674、Safariだけ半分の2,626,956。Cookieを400本設定して残った本数は、ChromeとEdgeが154本、Safariが400本。ページのquotaは、Chromeが10GiB(ディスク460GiB)、Edgeが10GiB(ディスク111GiB)、Safariが76.8GiB(ディスク460GiB)で、公式の説明のディスクの60%とは合わなかった。拡張機能のstorage.localは10MiBで、unlimitedStorageの権限があると128MiBまで書けた。

localStorage と sessionStorage は、公式の説明と同じ約 5 MiB でした。

MDN(Storage quotas and eviction criteria)原文
Browsers can store up to 5 MiB of local storage, and 5 MiB of session storage per origin.

出典を開く確認 2026-11-02

全角の文字は、Safari だけ半分の約 260 万文字でした。Cookie を 400 本設定すると、Chrome と Edge は 154 本、Safari は 400 本が残りました。IndexedDB などの上限は、公式の説明ではディスクの 60% です。
web.dev(Storage for the web)原文
An origin can use up to 60% of the total disk space.

出典を開く確認 2026-11-02

測定では Chrome と Edge が 10 GiB で、合いませんでした。拡張機能の local は 10 MiB で、unlimitedStorage の権限があると 128 MiB まで書けました。
Chrome for Developers(chrome.storage)原文
The storage limit is 10 MB (5 MB in Chrome 113 and earlier), but can be increased by requesting the "unlimitedStorage" permission.

出典を開く確認 2026-11-02

では、入れたデータは、どんなときに消えるのでしょうか。

どんなときに消えるのか?

消す操作ごとに何が残ったかを示す表(IT連携マップ編集部の測定・Chrome 156とEdge 156・各3回とも同じ)。ページのオリジンを削除すると、ページ側の6種とHttpOnlyのCookieが消え、chrome.storageと拡張機能のIndexedDB・localStorageは残った。拡張機能のオリジンを削除すると、拡張機能のIndexedDB・localStorageが消え、ほかは残った。閲覧データの削除(API・既定)では、ページ側の6種とHttpOnlyのCookieが消え、chrome.storageと拡張機能のIndexedDB・localStorageは残った。拡張機能のオリジンも指定すると、拡張機能のIndexedDB・localStorageも消えたが、chrome.storageはどの操作でも消えなかった。
消す操作ごとに何が残ったかを示す表(IT連携マップ編集部の測定・Chrome 156とEdge 156・各3回とも同じ)。ページのオリジンを削除すると、ページ側の6種とHttpOnlyのCookieが消え、chrome.storageと拡張機能のIndexedDB・localStorageは残った。拡張機能のオリジンを削除すると、拡張機能のIndexedDB・localStorageが消え、ほかは残った。閲覧データの削除(API・既定)では、ページ側の6種とHttpOnlyのCookieが消え、chrome.storageと拡張機能のIndexedDB・localStorageは残った。拡張機能のオリジンも指定すると、拡張機能のIndexedDB・localStorageも消えたが、chrome.storageはどの操作でも消えなかった。
消える場面 公式の説明 測定
空き容量が足りない 最近使っていないオリジンから消せる
web.dev(Storage for the web)原文
Chromium-based browsers will begin to evict data when the browser runs out of space, clearing all site data from the least recently used origin first, then the next, until the browser is no longer over the limit.

出典を開く確認 2026-11-02

測っていない
Safari で 7 日間操作しない スクリプトが書いた保存先が消える
WebKit(ブログ)原文
deleting all of a website’s script-writable storage after seven days of Safari use without user interaction on the site

出典を開く確認 2026-11-02

測っていない
閲覧データの削除 範囲による 上の図
persist()(永続を求める) 利用の履歴で自動に許可か拒否
MDN(Storage quotas and eviction criteria)原文
Safari and most Chromium-based browsers, such as Chrome or Edge, automatically approve or deny the request based on the user's history of interaction with the site and do not show any prompts to the user.

出典を開く確認 2026-11-02

新しいプロファイルは拒否

閲覧データの削除(拡張機能の API で実行)では、ページ側の 6 種が消え、chrome.storage は、どの操作でも消えませんでした。対策はデータが消えるときにあります。では、ディスクの上ではどんな形なのでしょうか。

ディスクの上では、どんな形で残るのか?

保存先 ブラウザを閉じたあとのファイル(Chrome・Edge)
localStorage・sessionStorage・IndexedDB・Cache Storage・OPFS 書いた文字列がそのまま見つかった
chrome.storage の local・sync 書いた文字列がそのまま見つかった
chrome.storage の session 見つからない(メモリの中だけ)
Chrome for Developers(chrome.storage)原文
Items in the session storage area are stored in-memory and will not be persisted to disk.

出典を開く確認 2026-11-02

Cookie(通常・HttpOnly) 暗号化した列に入っていた
取り出せない設定の鍵 生のバイトが IndexedDB のファイルに見つかった

ファイルを読めるのは、その PC のファイルを読める人やソフトウェアです。XSS とは別の脅威で、守る手段も別です。では、何をどこに置けばよいのでしょうか。

結局、何をどこに置けばよいのか?

理由はどのデータをどこに置くかにあります。

置くもの 向く保存先 注意すること
ログインの印 Cookie(HttpOnly を付ける) 使われることは防げない。XSS を防ぐ対策が先
なくなっても困らない一時データ localStorage 日本語は Safari で半分
大きなデータ IndexedDB・OPFS XSS では読まれる。閲覧データの削除で消える
拡張機能の内部の状態 chrome.storage ディスクの上では平文(session 以外)

ここから先は調査の詳細です(約 3 分)。上のカードだけで決められます。調べた 1 件ずつの記録は IT連携マップ に、出典 URL と調査日つきで公開しています。

調査の詳細

IT連携マップ編集部は、2026 年 11 月 2 日に、次の 3 つのブラウザで、同じ試験を各 3 回行いました。3 回とも同じだった結果だけを載せています。

ブラウザ OS 機械のディスク
Chrome 156 macOS 総量 460.4 GiB・空き 10 GiB
Edge 156 Windows 10 Pro 総量 110.7 GiB・空き 約 15 GiB
Safari 26.6.2 macOS 総量 460.4 GiB・空き 9.8 GiB

Edge は Windows 10 の機械で、Safari は拡張機能と、ディスクの上の検索を測っていません。

オリジンは、https://example.com のように、スキーム・ホスト・ポート番号の組です。localStorage から OPFS までの 6 種は、オリジンごとに分かれます。

試験の作り

実験用のページが、入力した文字をそのまま HTML に出力する弱点を持ち、別のオリジンから攻撃側のスクリプトを読み込みます。攻撃側のスクリプトは、7 種の保存先に、各回で違う目印の文字列を読みに行き、結果を別のサーバーへ送ります。拡張機能は、unlimitedStorage の有無で 2 つ、別の拡張機能(ホスト権限あり)で 1 つを読み込み、読めたかどうかを、自分の manifest を取得できる対照つきで確かめました。ディスクの上は、ブラウザを正常に閉じたあと、プロファイルのファイルから、目印の文字列と鍵の生のバイトを検索しました。正の対照(履歴の URL・localStorage・IndexedDB の目印が見つかること)が通った回だけ使っています。

公式の説明と合わなかったこと

  • ページの上限: 公式の説明は、1 つのオリジンがディスクの 60% まで、
    web.dev(Storage for the web)原文
    An origin can use up to 60% of the total disk space.

    出典を開く確認 2026-11-02

    Chrome は常に 60% を返す
    web.dev(Storage for the web)原文
    Chrome does not, and will always report 60% of the actual disk size.

    出典を開く確認 2026-11-02

    です。測定では、Chrome と Edge が 10 GiB、Safari が 76.8 GiB でした。普段使いの Chrome でも 10 GiB で、ディスクの空きを約 2 GiB 減らしても変わりませんでした。理由は分かっていません。
  • persist(): 新しいプロファイルの Chrome 156・Edge 156・Safari 26.6.2 では、通知を許可した後も拒否でした。普段使いの Chrome 155 では 3/3 で許可でした。履歴の違いか版の違いかは、切り分けていません。

公式文書が言っていること

  • Safari の 7 日: Safari を使っても、そのサイトを 7 日間操作しないと、スクリプトが書いた保存先が消えます。
    WebKit(ブログ)原文
    deleting all of a website’s script-writable storage after seven days of Safari use without user interaction on the site

    出典を開く確認 2026-11-02

    ホーム画面に追加した Web アプリは Safari とは別に使った日数を数え、データを消す意図はないと WebKit は書いています。
    WebKit(ブログ)原文
    Web applications added to the home screen are not part of Safari and thus have their own counter of days of use.

    出典を開く確認 2026-11-02

  • 機密性の高いデータ(拡張機能): 公式文書は、機密性の高いデータには storage.session を使うよう勧めています。
    Chrome for Developers(chrome.storage)原文
    If you’re working with sensitive user data, instead use storage.session

    出典を開く確認 2026-11-02

    この測定では、session は既定でコンテンツ スクリプトから読めず、ディスクにも書かれませんでした。

測っていないこと

Firefox・スマートフォンのブラウザ・Windows の Chrome・設定画面からの手動の削除・Safari の 7 日の規則とディスクが逼迫したときの自動の削除・Content Security Policy などの XSS の対策側は、測っていません。

← 調査記事の一覧へ 比較する

「ブラウザの保存先 7 種 — 読まれる・入る・消える」について、分からないところを聞いてください
この画面のヒント
「ブラウザの保存先 7 種 — 読まれる・入る・消える」について、分からないところを聞いてください
答えられる質問の例 — 押すと、そのまま質問します
編集部はベンダーからの掲載料・送客料・成果報酬を一切受け取りません。判定は編集部の調査記録にある一次資料から、機械で組み立てています。 チャット(HINT)の相談内容の扱いはプライバシーポリシーに書いています。
一覧: システム一覧 連携ツール(連携サービス)一覧 AI・自動化ツール一覧 稼働状況・障害情報
記載の誤り・掲載についてのご連絡 → 訂正・掲載のご依頼(無料・無条件・全社同一) 運営者情報