質問: インターネットセキュリティーについての質問です。
回答: > サイトにアクセスしただけでやろうと思えば簡単にデータ盗めますよね? どういう資料を見てそういう結論になったのか分からないですが、Cookieの仕組みをちゃんと理解する必要があります。 順を追って解説すると 1 まずブラウザがサーバーにリクエストを送ります。 でアクセスした場合、以下のようなリクエストがブラウザからサーバーに送信されます。(もっと色々あるけど省略しています) リクエスト(ブラウザ) ——————— GET /test/index.php HTTP/1.1 Host: www.example.com ——————— 2 サーバーは /test/index.php に対してリクエストがあったので index.php を動作させます。この時 index.php でsetcookie 命令でcookieを設定した場合、以下のようなSet-Cookieヘッダを付けたレスポンスを返します。 レスポンス(サーバー) ——————— 200 OK Content-Type: text/html Set-Cookie: A=1&B=2 expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/test; domain=www.example.com 〜省略〜 ——————— 上記のSet-Cookieヘッダには 1. ブラウザに保存して欲しい値: A=1&B=2 2. いつまで保存して欲しいかの期限: Sun, 17-Jan-2038 19:14:07 GMT 3. どのドメインにアクセスした時に保存してある情報を送って欲しいか: www.example.com 4. どのパス配下にアクセスした時に保存してある情報を送って欲しいか: /test といった情報がブラウザに送るので、ブラウザはレスポンスを受け取ったら、その指示に従ってブラウザ内に情報を保存します。ただしdomainに指定出来るものは条件があり、同じドメイン内しか設定出来ません。 上記の例だと domain=www.yahoo.co.jp と設定しても example.com とは異なるドメインなので無効になります。 3 指定のURLにアクセスしようとした時に リクエストの中にCookieヘッダをつけてリクエストします。 例えば にアクセスしようとした時 ブラウザ内に保存してあるCookie情報でwww.example.com/test が一致するので Cookieヘッダに付けて送ります。 リクエスト(ブラウザ) ——————— GET /test/abc/detail.php HTTP/1.1 Host: www.example.com Cookie: A=1&B=2 ——————— 逆に にアクセスした場合には一致しないのでCookieヘッダは付きません。 4 detail.phpではCookieヘッダから値を取得して $_COOKIE変数に格納します。 という流れなので、データを盗むことは出来ません。