Cookie
serverがResponse Headerとして指定する
Cookieに関するRFC
参考
Cookieの概要、属性の説明
セキュリティ的に問題になる箇所の解説
Cookieの開発者
他人のcookieを操作する
Cookieの語源
Lotteのサイトに説明あるのおもろmrsekut.icon Cookieを編集できるChrome拡張
手元で実験する時とかに使える
browserが、Request headerとして付与する
既に保存済みのCookieをkey=valueの組でserverに送る
code:request
Cookie: key=value
Cookieのkey=valueの組は、server側が生成する
制限
最大容量は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
似たようなのがある
サービス側がクライアント(ブラウザ)に「これを保存しておいて」と指示をする
ブラウザに情報を保持する
ブラウザが持っている一つの機能
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では管理しないか
特定のフォルダ以下を「見せない」という使い方しかできない
毎回計算する必要がある
ログイン画面をカスタマイズできない
明示的なログオフができない
ログインした端末の識別ができない
署名も確認もサーバー側で行うので、クライアントは一切鍵を持たない
攻撃例
誤解