コース目次 / 第2章

Cookie とボディ — POST で送る

セッションを運ぶ Cookie ヘッダと、フォーム送信の正体である POST ボディを、curl で手で組み立てます。

第2章 / 全4章目安 約12分この章のゴール: Cookie を手で付けて送れ、POST のボディを自分で組み立てられるようになる

前章で「ヘッダは自己申告」と言いました。その中でも、ログイン状態を運ぶのが 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章です。

この章はまだ完了していません。