Webセキュリティ入門:HTTP・Cookie・脆弱性
URLの構造
この回でやること
URLを部品に分解して、どこが利用者に書き換えられる場所なのかを見ます。
- 読む 約 5 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
URLは、ブラウザがどこへ何を求めるのかを1行に詰めた文字列です。この回では、それを6つの部品に分けて読みます。
読み終えるころには、URLの6つの部品それぞれが、何を決めているのかを説明できるようになります。
部品に分ける
次のURLを例にします。
プレーンテキスト
https://shop.example.com:443/items/42?color=red&size=m#reviews| 部品 | 値 | 意味 |
|---|---|---|
| スキーム | https | どの方式で話すか |
| ホスト | shop.example.com | どの相手と話すか |
| ポート | 443 | 相手のどの窓口か |
| パス | /items/42 | 何を求めているか |
| クエリ | color=red&size=m | 条件の指定 |
| フラグメント | #reviews | ページ内のどこか |
誰が決めているか
セキュリティの目で見ると、大事なのはそれぞれを誰が書けるかです。
スキームとホストは、行き先そのものです。ここが変われば別のサービスに話しかけていることになります。
パスとクエリは、利用者が自由に書けます。 アドレス欄で直接編集できますし、リンクを踏まなくても手で打てます。/items/42 を /items/43 に変えるのに、特別な道具は要りません。
URLは入力欄と同じ
パスやクエリに入っている値は、フォームに打ち込まれた文字と同じ扱いをします。「画面にそのリンクを出していないから」は、その値が来ない理由になりません。
フラグメントは送られない
#reviews の部分は、サーバーへ送られません。 ブラウザの中だけで使われます。
ここを勘違いすると、2つの向きで間違えます。サーバー側のログに残ると思って探しても見つかりません。逆に、見せたくない値をここに入れても、ブラウザや拡張機能からは見えています。