現状としては、ログインページでID,PASS入力後、
メインページに飛ぶのですが、ログインページに戻ります。
クッキーを見ると、セッションは発行されてます。
やりたいことは、ID,PASS一致後、セッションを発行して管理画面ページを
移動したいだけなんですが、どうせ覚えるなら、できるだけセキュアな方が
いいと思っていますので、その辺も含めていただけると大歓迎です。
下記が現在の構成になってます。
■データベース(管理ユーザ-テーブル)
■ログインページ(ID,PASS,submitボタンのみ)
└管理ユーザ-テーブルのID、PASSと一致したらセッション発行
↓
■メインページへ(その他セッションが必要な複数ページ)
===================
▼ログインページ
初期値
$_SESSION["login"] = 0;
IDとPASSが合っていたら
session_name("TESTECSHOP");
session_start();
$_SESSION["login"] = 1;
header("Location: http://xxxxx.main.php");
exit;
===================
▼メインページ
session_start();
if (!isset($_SESSION["login"]) || $_SESSION["login"]==0){
$_SESSION = array();
session_destroy();
header("Location: http://xxxxx/login.php");
exit;
}
ログインページで、
session_name("TESTECSHOP");
として、指定しているので、
メインページでも、
session_name("TESTECSHOP");
をstart_session()前に追加する必要があります。
現状では、見に行く名前が異なるので、メインページでは、セッション情報が取得できないのかと思います。
はずしていたら、すみません。
回答に書くほどの内容ではないのですが、セキュリティ的にというのはどんなことを想定されていますでしょうか?
提示して頂いたコードでは、ログインしたかどうかの情報しかセッション中で管理していないかと思います。それであれば、各ユーザに関する情報はメインページでも、閲覧・アクセスできないという認識であってますでしょうか?
認証情報をセッションで管理する以上、どうしてもセッションのハイジャックの問題はつきまといます。かといって、上記の場合ですと、個人情報がセッション情報にありませんので、基本的なセッション管理の注意点しか挙げられないかなと思います。
つまり、
・有効期間を短くする
・セッションIDを類推できないようにする
あたりかと。
何かの参考になれば。
なるほど。今は練習用にECショップの管理画面を作っていますので、
各種情報などの取得は大丈夫です。会員系のサイトだと必要ですよね。
本当に初心者ですので、こういうログイン時にはどんなものが一番安全なのか、
もしくはどれも一緒くらいなのかとか、わからないんですね。
毎回、IDとPASSをDBに問い合わせる・・・とかも考えたんですが。
とりあえず、セッションIDを類推できないようにする、で少し調べてみます。
ランダムとか、そんな感じなんですかね。
フォームを使用してIDとPASSWORDをリクエストしてDBに問い合わせる仕組みであれば、
まずSQLインジェクション対策をするべきだと思います。
SQLインジェクションとは要するにSQLを改ざんしてしまう攻撃です。
http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole01.h...
http://www.atmarkit.co.jp/fsecurity/column/ueno/42.html
PHPでSQLインジェクション対策を行うには
PEARライブラリのPEAR_MDB2のプレイスフォルダを使用するか
http://www.superomeo.com/2007/06/24/0937.html
まず正規表現にて入力されたデータをチェックします。
次にPHP組み込み関数のmysql_real_escape_string()を使用して、
入力された値をサニタイズする必要があります。
http://www.syon.co.jp/syontech/tech021.html
他にもHTTPリクエストを使用し、表示等をする場合には
クロスサイトスクリプティング対策が必要になり
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B...
セッションを使用する際には
クロスサイトリクエストフォーフェリー対策が必要になってきますので、参考にしてみて下さい。
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B...
順を追ってリンク紹介していただき、非常に参考になりました!
ありがとうございます!
これを見ると、自分が知ってるいくつかの会社のサイトとか、
意外とセキュリティ対策がされていないんだなーと思ったりします。
そういうサイトは多そうですね。
特にmysql_real_escape_string()は勉強して、是非使いたいと思います。
上記の方は無事、解決しました。
ありがとうございます!
引き続き、こうした方がセキュリティ的に良い、という
ものがありましたらお願いします。