質問: PHPの開発に挑戦しだした初心者です、ログイン画面で認証して取得した情報を、各遷移先画面でも共有するため、当初はクッキーにダイレクトに保管しようとしていました。しかし、脆弱性を指摘する記事・皆様のご見解からサーバ側でのセッション情報の活用を検討しだしています。 この面で勉強中ですが、分からないことが多々あるので、ご教示を頂けましたら幸いです。 問1:qiita.com/7968/items/ce03feb17c8eaa6e4672の記事の中で、クライアントからのリクエストの図に「保存しているCookieの情報も送信」という記載がありました。 これは、当該クライントが有すクッキー全てを、どこのサイトにも送信してしまう、という意味もあるのでしょうか? 各Cookieが、「どこのサイト向けに送信OK」となっていないの?!と思ったわけで。 SetCookieを実施したサイトにのみ(&ドメイン属性に追記されたサイト)送信されるのか否かを知りたいです。 自分の解釈ですと、PHPではCookieにセッションIDが保管される、 またその用途のCookieの名前は、サイト供給者が特段変更しない限り固定の名前である(一応遭えて伏せた)、と受けて取れたので この名前の変更必要性の材料としたく。 問2:こちらを変えることが常識でしょうか? 問3:上記問1の回答次第ですが、イントラネットで使われるWebシステムで保管されたクッキーが、当該クライアント端末がインターネットに接続した際 世間のサイトにバラまかれている、なんてことはあり得るのでしょうか?(聞くのが怖い) 問4:上記1のURLの記事の中で、セッションファイルの保存先について言及した部分がありました。早速自分も保存先の定義(PHP.ini)、と実際のパスを確認してみました。すると、過去日付のファイルが散見されました。 セッションの期限切れを迎えると、自動でセッションファイルは削除されるもの、と勝手な解釈をしています。 残っていたセッションファイルは何かの間違い・誤作動から生じているものでしょうか? 上記の当方の解釈の仕方の背景には、 如何にログアウト時の操作用に、セッションファイル破棄の動作がコーディングされていようと、クライアントは その操作以前にブラウザを閉じてしまうことがある、と捉えています。認識に違いはありませんでしょうか? 何卒よろしくお願い申し上げます。
回答: 問1:Cookieは必ず指定されたドメインにのみ送信されるように規定されています。 仮に指定しなくても、Cookieを送信してきたホスト名にのみ送信されるように作られています。 問2:セッションが保存されるCookie名はデフォルト(PHPSESSID)はやめたほうがいいと言われています。 以下のサイトの3番目に記述があります。 問3:基本はありえません。悪いクライアントソフトがやろうと思えばできてしまいますね。がそれはセッションやCookieのプロトコルの問題ではなくて、クライアント端末自体のセキュリティの問題になります。 問4:セッションファイル形式による古いセッションの破棄はガーベージコレクションと言われる機構で行われております。その機構により古いファイルが残ってしまうことはどうしても発生します。今回もその現象にHITしたのではないかと思います。