Cookie・LocalStorageの安全な使い分けを簡単解説

まずは、これだけ

Cookieはサーバーとのやり取りに向いた保存場所。LocalStorageはブラウザ内の設定保存に向いた保存場所です。
ログイン情報のように盗まれると困るものは、LocalStorageへ気軽に入れないのが基本です。

CookieはHttpOnlyでサーバーと連携し、LocalStorageはJavaScriptから読めるため注意が必要なことを比較した図
Cookie:サーバーへ自動送信できる LocalStorage:JavaScriptから読める

CookieとLocalStorageの違い

CookieLocalStorageも、ブラウザにデータを保存する仕組みです。ただし、向いている用途が違います。

Cookieは同じサイトへのリクエスト時に自動で送られます。LocalStorageはブラウザ内に保存され、JavaScriptから読み書きできます。この違いが、安全な使い分けの入口です。

Cookie

サーバーへ自動で送れるため、ログイン状態の確認に使われやすい。

LocalStorage

ブラウザ内で読み書きしやすく、画面設定などに向いている。

安全性の差

LocalStorageの値はJavaScriptから読めるため、XSS時に狙われやすい。

ログイン情報は慎重に扱う

アクセストークンやセッションIDのようなログイン情報は、盗まれると本人になりすまされる可能性があります。そのため、単に「保存しやすいから」という理由でLocalStorageに入れるのは危険です。

ログイン状態を扱うなら、サーバー側のセッションと、HttpOnlySecure を付けたCookieの組み合わせがよく使われます。HttpOnlyを付けると、JavaScriptからCookieを読み取りにくくできます。

1 ログイン 盗まれると困る情報が生まれる
2 Cookie サーバーとの確認に使う
3 HttpOnly JavaScriptから読みにくくする
4 設定保存 表示設定などはLocalStorageへ
5 見直し 入れる前に盗まれた時を考える

LocalStorageに向いているもの

LocalStorageは悪い仕組みではありません。ユーザーが選んだテーマ、サイドバーの開閉状態、入力途中の下書きなど、盗まれても大きな被害になりにくい設定保存には便利です。

反対に、パスワード、秘密鍵、長く使えるログイントークンなどは避けます。迷ったら「この値を見られたら、他人が本人として操作できるか」を考えると判断しやすくなります。

入れてよい例

テーマ色、表示件数、チュートリアルを見たかどうか。

避けたい例

パスワード、秘密情報、長く使えるログイントークン。

迷った時

盗まれた時に、ログインや操作につながるかを確認する。

ここまでのまとめ

CookieとLocalStorageは、どちらもブラウザ保存ですが役割が違います。Cookieはサーバーとのやり取り、LocalStorageは画面設定や一時保存、と分けて考えると安全に使いやすくなります。

ログイン情報はLocalStorageへ気軽に入れず、サーバー側の確認と安全なCookie設定を組み合わせて扱います。