2010-11-26 16 views
2

最も人気のある学校は、セッションIDをランダムに生成し、ログイン時にセッションIDを再生成し、既存のユーザーのセッションIDを定期的に再生成することです。

私は別の解決策を使用していますが、私は経験豊富なPHPプロではありません。私は紛失している恐れのあるセキュリティホール(または2つ以上)が懸念されます。

もしあなたが次のことを見て、それがどのように危険にさらされているか教えていただけたら、私はそれを感謝します。

スクリプトは、ユーザーのマシンに関連付けられたセッションIDを作成します。私は現在の日付をハッシュに含めようと考えていましたが、夜勤の労働者は真夜中にログアウトするでしょう。 )

無料のWiFiを使用して、同じOSとブラウザを持つ2人のユーザーがコーヒーショップに座っていると、IPアドレスを使用すると悪用されることがわかりました。これは内部のMISのためであり、各ユーザはそれぞれ独自の静的IPアドレスを持ちます。彼らがウェブからアクセス可能にすることを後で決めるなら、私は困っている!しかしそれは仕様の一部ではありませんでした。

// Set the session ID 
$session_hash = md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_HOST'] . $_SERVER['REMOTE_ADDR']); 
// Compare against session ID received from user 
if (session_id() != $session_hash) 
{ 
    session_destroy(); 
    unset ($_SESSION); 
    session_id($session_hash); 
    session_start(); 
} 
else 
{ 
    // Attempt to load user details from database if $_SESSION['user_ID'] is set. 
} 

すべての建設的なコメントは歓迎され、評価されました!

答えて

7

あなた自身のセッションIDを作成しようとしても気にしません。あなたの方法は、プロキシサーバーの場合、同じリモートホスト、ユーザーエージェント、リモートアドレスを共有する人が多いため、特に弱いです。

PHPの組み込みセッションは、特別な理由がある場合を除いて使用してください。そのような理由があるという兆候はありませんでした。まったく逆ですが、あなたの自宅で圧延された「強化された」セッションセキュリティがそれほど重要ではない内部使用のためのシステムだと言います。

あなたがやっていることは本当に問題ではありません。あなた自身でロールを張ってPHPがあなたに提供しているもののセキュリティを弱めるだけです。

+0

私はすべてが賢いと思っていました。あなたの意見は完全に分かりますが、PHPの組み込みセッションはそれほど安全ではないと考えていました。 – Kalessin

1

組み込みのメカニズムがあなたのニーズに合っているはずです。独自のソリューションを展開することを強く求めている場合は、最後にランダムなデータを追加することをお勧めします。このようなランダムなデータを生成する最良の方法は、PHPのopenssl_random_pseudo_bytes()-functionです。

2

すべてが独自の静的IPを持っている場合は、セッションにIPを格納し、ページが読み込まれるたびに比較します。 $_SERVER['REMOTE_ADDR'] != $_SESSION['IP']の場合、誰かがセッションを盗もうとしています。

そして、session_regenerate_id()を忘れないでください。

関連する問題