- ベストアンサー
セッションの安全性について
- セッションidは表示されている誰でも見れるidなのでセキュリティ的にまずいですか?簡単にセッションのっとれるもんなんでしょうか?
- 一般的にはどうやっているのでしょうか?ログインページ全て(例えば編集画面とか会員情報とか)にmysqlから暗号化されたパスワードを取得して、それをセッションに入れて、また、mysqlからパスワードと照合したりしてるんでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>セッションidは表示されている誰でも見れるidなのでセキュリティ的にまずいですか? >簡単にセッションのっとれるもんなんでしょうか? 「表示されている」とはどういう意味でしょうか?Cookieに格納すれば少なくともhttpリクエストのデータを覗かれない限りはわかりませんよね。 なお(データを覗かれている可能性も考慮して)セッションIDは必要に応じて定期的にregenerateするのが一般的です。 http://php.net/manual/ja/function.session-regenerate-id.php >一般的にはどうやているのでしょうか? >ログインページ全て(例えば編集画面とか会員情報とか)にmysqlから暗号化されたパスワードを >取得して、それをセクションに入れて、また、mysqlからパスワードと照合したりしてるんでしょうか? ログインしているユーザIDをセッション変数で持ち回るくらいでしょうか・・・。わざわざ毎回照合したりはしません。
その他の回答 (3)
HTTP1.1ではLocationヘッダで相対URLを指定することは禁じられています。 HTTP1.0でも可能な限り(個人的には)絶対URLで書くべきだと思います。 なお、 'Location: http://..../login.php' は正確に入力してください。 半角ペースのあけ方がおかしかったりすると正常に遷移しない可能性があります。 PHPからMySQLに接続する際に注意すべき点をまとめているのでこちらをご覧ください。 http://qiita.com/mpyw/items/b00b72c5c95aac573b71 以下は少しagunuzさんの回答と重複しますが再確認のために。 ・$_SESSION['id'] が定義されているかどうかはisset構造でE_NOTICEを発生しないようにしてチェック。 ・セッションの乗っ取りに関して http://qiita.com/mpyw/items/8f8989f8575159ce95fc ・ログインが終わった後はパスワードを保持する必要はないです。会員IDのみで十分です。SQL文を発行する際に「WHERE id = 会員ID」のようにします。
お礼
回答ありがとうございます 気をつけます
- agunuz
- ベストアンサー率65% (288/438)
>表示されているとは会員の一覧を表示で会員番号が表示されています >それをセッションidとして使っているためです 会員番号は$_SESSION['id']という『セッション変数』に格納しているだけでは? セッションIDはsession_start()すれば、自動的に割り当てられます(session_regenerate()すれば新しいセッションIDが割当て直される)。 http://php.net/manual/ja/function.session-start.php 下記のスクリプトで、セッションIDが割り当てられるのを確認してください。 <?php session_start(); print session_id();
お礼
<?php session_start(); print session_id(); 上のコードで自動的に割り当てられてるのを確認しました それで自分的に想像していたのがログインしたときにセッションidに入れて、ログインを判定できるようにすればいいのでは?と思ったのですが <?php session_start(); $_SESSION['id'] = session_id(); googleで検索して調べてみたらフォームから直接postされたidを代入していました え?session_id()は利用しないの?と思ってしまいました 頭こんがらがっています どうやるのが正しいのでしょうか? 検索して調べたログイン後のチェックphp(コピペで検索できるとおもいます) <?php session_start(); //パラメーター取得 $id = $_POST['id']; $password = $_POST['password']; //簡易ログイン if ($id == "yamada" && $password == "pass") { //ログイン成功 //セッション ID の振り直し session_regenerate_id(true); //セッションに値を格納 $_SESSION['id'] = $id;
- agunuz
- ベストアンサー率65% (288/438)
#書き忘れました(汗 >セッションidがなかったらログインページ戻す >if(!$_SESSION['id']){ この記述はどこから?普通は(session_start()したあとで) if (isset($_SESSION['id'])) { のように、issetでチェックします。
お礼
if (!isset($_SESSION['id'])) { でセッションがなければログインさせない処理にしました
お礼
回答ありがとうございます 表示されているとは会員の一覧を表示で会員番号が表示されています それをセッションidとして使っているためです そもそもセッションidは皆さんはどうやって作っているのでしょうか? やっぱりランダムな数字みたいにして作っているのですか?