コース目次 / 第2章
Cookie とボディ — POST で送る
セッションを運ぶ Cookie ヘッダと、フォーム送信の正体である POST ボディを、curl で手で組み立てます。
前章で「ヘッダは自己申告」と言いました。その中でも、ログイン状態を運ぶのが Cookie ヘッダです。
Cookie を手で付ける
ブラウザはログイン後、サーバから受け取ったセッション Cookie を、以降のリクエストに自動で付けます。curl では -H "Cookie: ..." で手で付けられます。
curl -s -H "Cookie: session=alice" "http://127.0.0.1:4610/memo"
返ってきた headers に "cookie": "session=alice" が入ります。ここで気づいてほしいこと——この値は、あなたが手で書きました。つまり Cookie も、送る側が自由に組み立てられる値です。
だからセッション Cookie の中身は、推測できない・改ざんを検知できる形でなければなりません。もし session=alice のように「ユーザー名がそのまま」入っていたら、session=bob に書き換えるだけで他人になりすませます(この検査用サーバは、まさにその危うい形をわざと真似ています)。本物のセッションIDは、長くランダムで、サーバ側だけが持つ台帳と突き合わせます。
POST でボディを送る
フォームの送信ボタンの正体は、多くの場合 POST リクエストです。-d を付けると、curl は自動で POST になり、データをボディに載せます。
curl -s -X POST "http://127.0.0.1:4610/memo" -H "Cookie: session=alice" -d "title=牛乳"
{
"method": "POST",
"path": "/memo",
"headers": {
"cookie": "session=alice",
"content-length": "12",
"content-type": "application/x-www-form-urlencoded"
},
"body": "title=牛乳"
}
いくつも見どころがあります。
- メソッドが
POSTになった(-dを付けたから)。 content-typeがapplication/x-www-form-urlencodedになった。これは HTML フォームの既定の形式です。content-lengthを curl が自動で計算して付けた。bodyに、送ったデータがそのまま載っている。
JSON API を相手にするときは -H "Content-Type: application/json" -d '{"title":"牛乳"}' のように、Content-Type とボディの形を合わせます。「どの形式で送るか」を自分で決められる——これが手で送ることの強みです。
次章は、ここまでの操作を「1つのリクエストを少しずつ変えて何度も送る」流れにまとめ、GUI ツール(Burp の Repeater)への橋を架けます。
こうなっていればOK
卒業まであと1章です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。