- ベストアンサー
セッション使用時のセキュリティについて
- 問い合わせフォームをPHPで書いています。セッション使用時のセキュリティについてアドバイスを頂きたいです。
- 基本的な流れは1.html(入力フォーム表示)→2.php(入力内容を確認)→3.php(入力内容を送信)です。
- セキュリティの観点で見直すべき箇所はありますか?また、セッションとクッキーが残ったままになる問題についても教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
フォームの遷移を、2.phpで諦めて別ページに行ってしまった後に、 直接2.phpにアクセスすると、入力された情報が再度表示されます。 入力者が共有PCなどを使っていた場合に、情報が盗み見られる可能性は否定できません。 ただ、Cookieの有効期限を特に設けていないのであれば、ブラウザさえ閉じれば、同じSessionにアクセスすることが出来なくなります。 後はphp.iniなどで設定しているSessionのGCのタイミングでSessionも削除されます。 なので対策の例としては、2.phpには、POSTメソッド以外でアクセスされた場合に、SessionとCookieの削除を行い、1.phpにでもリダイレクトしたりとか、exitとかでレンダリングしないようにする。 といったところでしょうか。
その他の回答 (1)
- hogehoge78
- ベストアンサー率80% (433/539)
>クッキーが生成されるのは、session_start()が実行されたらすぐに出来るのか? >それともsession_start()が含まれているプログラムが全て実行されてから生成されるか? クッキーは、HTTPのヘッダの一種で、持続的に値を持たせる為に開発されたものです。セッションは、そのクッキーを利用したものに過ぎません。 前述したとおり、HTTPのヘッダの一種なので、header関数と同様に、何らかの出力が行われる前、が正解です。 それではセッションとは何なのか、というところですが、PHPのセッションは、session_start関数を叩くと、まず、ユニークなIDを生成します。 ユニークなIDを生成したら、そのIDの名前が付いているファイルを生成して、サーバのphp.iniで設定してあるディレクトリに保存します。 その後、クッキーにそのIDを渡します。 ブラウザはクッキーが生きている間、セッションのIDを持っていることになるので、次にPHPにアクセスしたとき、サーバに保存したセッションファイルの名前とクッキーに持たせたIDを照合して、そのIDと紐付けられたセッションに持たせた値($_SESSIONの中身)を展開できる、というものです。 >"2.php"の確認画面でリロード出来る事と、最後の3.phpから2.phpに戻る事が出来るのが気になってしょうがありません。 この問題は、キャッシュコントロールと、ワンタイムトークンにて、対策を行うことになるのですが、一口に説明できる内容ではないので、一度Googleなどで調べてみてください。
補足
丁寧な解説をありがとうございます。 お陰さまでおぼろげながらですが、理解出来た気がします。 リロード対策としては、以下のアドレスを参考にしてみました。 http://itpro.nikkeibp.co.jp/article/COLUMN/20070910/281585/ キャッシュコントロールやワンタイムトークンについては改めて調べてみます。 アドバイスありがとうございました。
補足
ありがとうございます。 セッション、クッキーについて詳しく調べたのは初めてなので、 セッションとクッキーについての理解が不足しています。 セッションはサーバ側、クッキーはクライアント側くらいは理解出来ましたが、 クッキーが生成されるのは、session_start()が実行されたらすぐに出来るのか? それともsession_start()が含まれているプログラムが全て実行されてから生成されるか? など、なんとなく気になってしょうがありません。 お教え頂いたとおり、2.phpに$_SERVER['HTTP_REFERER']と$_SERVER["REQUEST_METHOD"]を使用し、1.htmlから来ているか、リクエストメソッドはPOSTかを調べ、もしそうで無ければ、セッションとクッキーを削除してから再び1.htmlの入力フォームに飛ばすようにしてみました。 "2.php"の確認画面でリロード出来る事と、最後の3.phpから2.phpに戻る事が出来るのが気になってしょうがありません。