Webセキュリティ入門:HTTP・Cookie・脆弱性
HTTPメソッド GETとPOSTの違い
この回でやること
GET と POST の違いを、意味の面と実際の扱いの両面から整理します。
- 読む 約 5 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
HTTPメソッドは、要求の1行目でサーバーに何をしたいかを告げる語です。この回では、GETとPOSTの違いを意味と実際の扱いの両面から見ます。
読み終えるころには、メソッドの選び方が防御に関わる理由を説明できるようになります。
主なメソッド
| メソッド | 意味 | 状態を変えるか |
|---|---|---|
| GET | 取得する | 変えない |
| POST | 送る、作る | 変える |
| PUT | 置き換える | 変える |
| PATCH | 一部を変える | 変える |
| DELETE | 消す | 変える |
約束であって強制ではない
ここが要です。GET と書いてあっても、サーバーが状態を変えることは技術的にできます。
GET /items/42/delete のような設計にすれば、GET で削除が起きます。HTTP はそれを止めません。止めるのは実装する側です。
これを守らないと困ることがあります。GET は「取得だけ」という前提で、いろいろな仕組みが動いているためです。
- ブラウザや中間装置が勝手に先読みする
- 履歴やログにURLごと残る
- 画像やリンクとして他サイトから呼び出せてしまう
3つ目は特に重い問題です。他人のサイトに <img src="..."> を置くだけで、閲覧者の権限で処理が走ることになります。
「取得だけ」を守ることは、行儀の問題ではなく防御です。守らないと、リンクを踏ませるだけで操作が成立します。
秘密を GET に載せない
GET の値はURLに入ります。URLは、履歴、サーバーのアクセスログ、中間装置の記録、外部サイトへ渡る参照元情報に残ります。
合言葉や鍵をクエリに入れると、残ってほしくない場所すべてに残ります。 これらはボディに入れます。
その他のメソッドと、上書き
HEAD は GET と同じですが本文を返しません。存在確認に使われます。OPTIONS は、そのパスで何が許されているかを尋ねます。CORS の確認でも登場します。
見落としがちなのがメソッドの上書きです。POST で送りながら X-HTTP-Method-Override: DELETE のようなヘッダーを付けると、フレームワークによっては DELETE として扱われます。古い環境向けの互換機能として用意されているものです。
これが有効なままだと、POST しか許していないつもりの経路から削除が呼べます。 使っていないなら無効にします。