人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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;
}

●質問者: yossui_coll
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:EXIT LOGiN PHP クッキー セッション
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● t_shiono
●36ポイント

ログインページで、

session_name("TESTECSHOP");

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

メインページでも、

session_name("TESTECSHOP");

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

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

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

◎質問者からの返答

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

ありがとうございます!

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

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


2 ● t_shiono
●11ポイント

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

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


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

つまり、

・有効期間を短くする

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

あたりかと。

何かの参考になれば。

◎質問者からの返答

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

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

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

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

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

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

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


3 ● snb04
●35ポイント

フォームを使用して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()は勉強して、是非使いたいと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ