Cookie
Set-Cookie Headerを使って指定する
serverがResponse Headerとして指定する
Cookieに関するRFC
RFC2109 (最初期)
RFC2965 (改訂版)
RFC6265 (改訂版の改訂版)
RFC6265bis
参考
『Webブラウザセキュリティ』 4章
Cookieの概要、属性の説明
セキュリティ的に問題になる箇所の解説
#WIP
Louis J. Montulli II
Cookieの開発者
https://ja.wikipedia.org/wiki/ルー・モントゥリ
https://blog.ts5.me/entry/20110206/1297000717
他人のcookieを操作する
Cookieの語源
https://www.lotte.co.jp/kengaku/biscuit/topics/topics06.html
Lotteのサイトに説明あるのおもろmrsekut.icon
https://ja.stackoverflow.com/questions/22934/cookie-%E3%81%AE%E5%90%8D%E5%89%8D%E3%81%AE%E7%94%B1%E6%9D%A5%E3%81%A8%E3%81%AF
Origin-Bound Cookies
https://asnokaze.hatenablog.com/entry/2022/06/26/030130
https://github.com/sbingler/Origin-Bound-Cookies
EditThisCookie
Cookieを編集できるChrome拡張
手元で実験する時とかに使える
Cookie header
browserが、Request headerとして付与する
既に保存済みのCookieをkey=valueの組でserverに送る
code:request
Cookie: key=value
Session管理としてCookieを使う場合、key=valueのvalueがSession ID
Cookieのkey=valueの組は、server側が生成する
制限
RFC6265 4.1
最大容量は4KB
At least 4096 bytes per cookie (as measured by the sum of the length of the cookie's name, value, and attributes).
1つのCookieに指定できるkey、value、Set-Cookieの属性など込み込みのサイズ
1つのdomainあたりのCookieの最大個数は50個まで
At least 50 cookies per domain.
全部で3000個まで
At least 3000 cookies total
「全部」ってなに #??
browser?サイト?タブ?なに?
Next.jsでCookie
似たようなのがある
next-cookies
https://www.npmjs.com/package/next-cookies
next-cookie
https://www.npmjs.com/package/next-cookie
サービス側がクライアント(ブラウザ)に「これを保存しておいて」と指示をする
ブラウザに情報を保持する
ブラウザが持っている一つの機能
HTTPはステートレス性だが、Cookieを使うことで、中断箇所から作業を開始できるなど、ステートフルっぽく使える
dev toolでconsole.log(document.cookie)とかすると見れる
curlで使う
-c/--cookie-jarで指定したファイルに受信したクッキーを保存
-b/--cookieで指定したファイルから読み込んでクッキーを送信
両方同時にも使える
curl -c cookie.txt -b cookie.txt -b "name=value" http://localhost:18888
1つのドメイン(Webサーバー)に対して保存できるCookieの数は20個まで。
1つのCookieは名前と値をあわせて4Kバイトまで。
クライアントに保存できるCookieの数は全体で300個まで。
基本的な使用の流れ
clientがrequestをserverに送る
この時点ではCookieは存在しない
serverがCookieを付与して返す
Set-Cookieを使う
key=valueを返す
例えば、app_key=1234とする
serverは、1234をkeyにして、そのuser固有の値を何かしら保存しているはず
table:_
Cookieのkey Cookieのvalue (session id) 実際の値
app_key 1234 userId: 1, pass: hogepiyo
1234が漏洩したらアウト
この例の場合passが漏洩したことに等しい
browserはCookieを保存する
以降のrequestにはCookieを付与してserverに送る
Cookie headerを使う
key=valueの組
serverはrequestの中からCookieを検出し、それを踏まえて計算する
Response Headerで指定する
server側が、寿命の話などをしている
serverが、browserに対して指示をしている
仮にMax-Age=0を返せば、BrowserはBrowserから保存しているCookieを削除する
それ以降のrequestにはCookieは乗らないので、ゲストになった感じになる
serverが保存しているデータを消すかどうかは?
勝手にしろ、という感じ科
そもそも主導権はserver側にある
どういうアルゴリズムで生成すればいいか?
これはもはやCookieは関係ないので、Session IDとかのページに書くべきmrsekut.icon
#??
しくみ
どういう情報をCookieで管理して、
どういう情報はCookieでは管理しないか
Basic認証、Digest認証があまり使われていない理由
特定のフォルダ以下を「見せない」という使い方しかできない
毎回計算する必要がある
ログイン画面をカスタマイズできない
明示的なログオフができない
ログインした端末の識別ができない
署名付きCookie
署名も確認もサーバー側で行うので、クライアントは一切鍵を持たない
js-cookie
攻撃例
HttpOnlyを上書きする攻撃
CSRF
セッションアダプション
クロスサイト・クッキング
https://ja.wikipedia.org/wiki/クロスサイト・クッキング
クッキーモンスター問題
Session Hijacking
Session Fixation攻撃
https://www.docswell.com/s/ockeghem/K44J1K-phpconf2020#p4
誤解
https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies
https://cybersecurity-jp.com/security-measures/18583
https://www.techmatrix.co.jp/product/appscan/w_attackofappli/attack4_cookie.html
https://atmarkit.itmedia.co.jp/ait/articles/0307/09/news001.html
https://numb86-tech.hatenablog.com/entry/2020/01/19/004420
https://blog.tokumaru.org/2009/01/introduction-to-session-fixation-attack.html
chrome-extension://oemmndcbldboiebfnladdacbdfmadadm/https://www.ipa.go.jp/files/000017508.pdf
https://at-virtual.net/securecoding/cookie%E3%81%AEsecure%E5%B1%9E%E6%80%A7-httponly%E5%B1%9E%E6%80%A7%E3%81%AE%E6%8C%87%E6%91%98%E3%81%A8%E4%BF%AE%E6%AD%A3%E6%96%B9%E6%B3%95%E3%81%A8%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%AE%E8%A7%A3/
https://www.techscore.com/blog/2017/10/06/about-cookie/
https://qiita.com/hththt/items/07136ad74127999df271
https://qiita.com/7968/items/ce03feb17c8eaa6e4672
https://www.itmedia.co.jp/news/articles/2001/09/news040.html
https://blog.jxck.io/entries/2020-02-25/end-of-idyllic-cookie.html
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2020/04/post-a9944a.html
https://asnokaze.hatenablog.com/entry/2020/04/19/173445