piapia123
ja

Cookie 整形

Web

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

⚠️ 通信は行いませんので、Cookie はご自身で取得してください(開発者ツールの Application → Cookies、または `curl -I` が返す `Set-Cookie` 行)。⚠️ なお、実際のログイン状態を持つ Cookie は、どのオンラインツールにも貼らないでください —— セッションを渡すのと同じです。このツールは完全にローカルで動きますが、習慣として身につけておく価値があります。 `Cookie` や `Set-Cookie` の 1 行を読みやすい表に分解します —— ブラウザの開発者ツールからコピーしてそのまま貼り付けてください。 ⚠️ この 2 つのヘッダーは似て見えて意味がまったく違います。リクエストの `Cookie` ヘッダーは名前と値の平坦な並びです: ``` a=1; b=2; session=abc ``` これは3 つの cookie です。一方レスポンスの `Set-Cookie` は 1 行につき1 つの cookie を記述し、セミコロンの後ろはその属性です: ``` session=abc; Path=/; HttpOnly; Secure ``` 同じ `a=1; b=2` でもここでは「a という名前の cookie に、b という属性が付いている」という意味になります。判断を誤ると出力はまったく変わり、しかもどちらの誤りも例外を投げません —— そこで本ツールは自動判別し、必要なら手動で指定できます。 判別規則は「既知の cookie 属性名(Path / Domain / Expires / Max-Age / Secure / HttpOnly / SameSite)が現れるか」であり、「最初のセミコロンの後に何かあるか」ではありません —— 後者だと極めてよくあるリクエストヘッダー `a=1; b=2` を Set-Cookie と誤認します。 あわせて `%20` のようなパーセントエンコードを解除し、各 cookie に欠けているセキュリティ属性を指摘します:`HttpOnly` なしはページ内のスクリプトから読めること(1 回の XSS でセッションを奪われます)、`Secure` なしは平文 HTTP でも送信されること、`SameSite` なしはクロスサイトのリクエストに付いていくこと(CSRF の温床)を意味します。

機能

  • リクエストの `Cookie` とレスポンスの `Set-Cookie` の両方に対応、自動判別と手動指定の両方
  • `Set-Cookie` の属性は旁注として分離 —— 「値」に混ざって一緒にコピーされません
  • `Expires` と `Max-Age` を具体的な時刻に換算し、期限切れは明示
  • 各 cookie に欠けている `HttpOnly` / `Secure` / `SameSite` を提示
  • ⚠️ `Partitioned`(CHIPS)に対応 —— しかも `Secure` が無いときは別項目で警告します。その組み合わせはブラウザーにそのまま拒否されるためで、「HttpOnly が無い」のような「動くが弱い」とは性質が違います
  • 値のパーセントエンコードを任意で解除
  • 引用符で囲まれた値の中のセミコロンは区切りとして扱いません
  • すべて端末内で解析し、cookie は外部に出ません

使い方

  1. `Cookie` または `Set-Cookie` の行を左側に貼り付けます(複数行も可)
  2. 判別が合わない場合は解析方法を手動で指定します
  3. 結果がすぐ表示され、各行を個別にコピーできます

よくある質問

`a=1; b=2` が 2 つの cookie になるのはなぜですか?
`Cookie` リクエストヘッダーでは実際に 2 つの cookie だからです —— このヘッダーは複数の独立した名前と値の組をセミコロンで区切るのが最も一般的な形です。 セミコロンの後ろが属性を意味するのは `Set-Cookie` レスポンスヘッダーだけです。両者は「既知の属性名が現れるか」で区別します:`a=1; b=2` には `Path` や `HttpOnly` といった名前が無いため、リクエストヘッダーとして解釈されます。属性を足せば変わります —— `a=1; b=2; Secure` は `a` という 1 つの cookie と、その属性 `b=2` になります。 自動判別が用途に合わない場合は「解析方法」を手動指定してください。
「HttpOnly なし」の指摘はどの程度重要ですか?
セッション cookie にとっては非常に重要です。`HttpOnly` はその cookie を JavaScript から見えなくする仕組みです —— ページに XSS が 1 つでもあれば(第三者のスクリプトが汚染されただけでも)、`HttpOnly` の無い cookie は `document.cookie` から直接読み取られ、攻撃者のサーバーへ送られます。セッションを奪われた時点でそのアカウントは奪われたも同然です。 `Secure` と `SameSite` も同様に重要ですが場面が異なります:`Secure` は平文通信の傍受を、`SameSite` はクロスサイトのリクエストに cookie が自動で付くこと(= CSRF)を防ぎます。3 つとも設定するのがほぼ常に正解です。
`Max-Age` と `Expires` の違いは何ですか?
`Max-Age` は「今から何秒」、`Expires` は絶対的な時点です。両方ある場合は `Max-Age` が優先されます(RFC 6265 の規定)—— 絶対時刻はクライアントの時計のずれやタイムゾーン設定の誤りの影響を受けますが、相対的な秒数は受けません。 他によくある 2 つの場合:値が 0 か負なら即座に削除(ログアウトがこれです)、どちらも設定しなければブラウザを閉じると消えるセッション cookie になります —— ブラウザを閉じるたびに再ログインを求められるのはこれが理由です。

関連ツール