PHPでセッションを使ったログインの質問です。

現状としては、ログインページで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;
}

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2007/11/02 23:53:08
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:t_shiono No.1

回答回数256ベストアンサー獲得回数22

ポイント36pt

ログインページで、

session_name("TESTECSHOP");

として、指定しているので、

メインページでも、

session_name("TESTECSHOP");

をstart_session()前に追加する必要があります。

現状では、見に行く名前が異なるので、メインページでは、セッション情報が取得できないのかと思います。

はずしていたら、すみません。

id:yossui_coll

上記の方は無事、解決しました。

ありがとうございます!

引き続き、こうした方がセキュリティ的に良い、という

ものがありましたらお願いします。

2007/11/01 15:50:34
id:t_shiono No.2

回答回数256ベストアンサー獲得回数22

ポイント11pt

回答に書くほどの内容ではないのですが、セキュリティ的にというのはどんなことを想定されていますでしょうか?

提示して頂いたコードでは、ログインしたかどうかの情報しかセッション中で管理していないかと思います。それであれば、各ユーザに関する情報はメインページでも、閲覧・アクセスできないという認識であってますでしょうか?


認証情報をセッションで管理する以上、どうしてもセッションのハイジャックの問題はつきまといます。かといって、上記の場合ですと、個人情報がセッション情報にありませんので、基本的なセッション管理の注意点しか挙げられないかなと思います。

つまり、

・有効期間を短くする

・セッションIDを類推できないようにする

あたりかと。

何かの参考になれば。

id:yossui_coll

なるほど。今は練習用にECショップの管理画面を作っていますので、

各種情報などの取得は大丈夫です。会員系のサイトだと必要ですよね。

本当に初心者ですので、こういうログイン時にはどんなものが一番安全なのか、

もしくはどれも一緒くらいなのかとか、わからないんですね。

毎回、IDとPASSをDBに問い合わせる・・・とかも考えたんですが。

とりあえず、セッションIDを類推できないようにする、で少し調べてみます。

ランダムとか、そんな感じなんですかね。

2007/11/01 21:57:39
id:snb04 No.3

回答回数11ベストアンサー獲得回数0

ポイント35pt

フォームを使用して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...

id:yossui_coll

順を追ってリンク紹介していただき、非常に参考になりました!

ありがとうございます!

これを見ると、自分が知ってるいくつかの会社のサイトとか、

意外とセキュリティ対策がされていないんだなーと思ったりします。

そういうサイトは多そうですね。

特にmysql_real_escape_string()は勉強して、是非使いたいと思います。

2007/11/02 09:20:21

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません