2011-06-20 38 views
1

セキュリティで保護されたWebログインのためのベストプラクティスと、さらにActive Directoryに対して認証されているPHPアプリケーションの永続的なログインについていくつか説明したいと思います。PHP Webアプリケーションの安全なログインのベストプラクティスは何ですか?

  1. ログイン時に、Post-Redirect-Getモデルを実装するのは理にかなっていますか? $_SESSIONにパスワードを保存することはおそらく良い考えではありません。

  2. 認証後、特定の$_SESSIONフィールドが有効で安全な方法でログインしているかどうかを確認していますか。

答えて

1

任意の時点でパスワードをプレーンテキストで保存することはお勧めできません。

1)私はログインページにPRGモデルを推奨しません。起こる最悪の事は、その人が2度ログインしていることです。それほど悪くはありません。

$ _SESSIONに格納されたデータは、通常、クライアントが読み取ることができません。悪意のある従業員やハッカーがアクセスできるサーバーに格納されます。

2)認証後、誰かがログインしているかどうかを確認するためにセッションを確認しても問題ありません。私はIP、ユーザエージェント、および$ _SERVER変数に簡単に取得できる他の情報を保管し、時折または毎回比較することをお勧めします。誰かが他人のセッションIDをハッキングしてしまう可能性を減らすため。

ログイン時にセッションIDを再生成することは、あなたの特定のシナリオについてはわかりませんが、私には分かりません。私の提案は、単にログアウト時にそれを再生成することです。また、必要に応じてセッションにタイムアウト機能を追加することもできます。

+0

ありがとうございます。ユーザーが何かをクリックしてブラウザの「戻る」ボタンを使用すると、情報を再ポストする必要があるという声が聞こえるというPRGモデルについて考えていました。私は、リダイレクトしてから認証することができると思います。 – Charx

+0

セッションID再生成は、非ログモードでHTTPで使用されたセッションIDをユーザーが使用できないようにするために使用されます。彼はログインしているので、以前と同じではないセッションIDでSSLを実行することが重要です。そうしないと、SSLモードでは新しいものは保護されません。 – regilero

+0

@regilero - それは理にかなっています。しかし、あなたのサイトにSSLを持っているのであれば、それをいつも使ってみませんか?私は、SSLと非SSLの間で問題を見てきたよりもずっと多くの問題を見てきました。 – evan

1

セッションのis_validキーワードのように、匿名ユーザーとログインユーザーを区別するために何かを保存する必要があります。

これは、セッションID(各要求でクリアに送信されたクッキー値)をキャッチする誰もがセッションを取得することを意味します。これはセッションハイジャックと呼ばれ、あなたが恐れるべき唯一のものです。

あなたを保護する方法は、ログインしている間にHTTPSの接続中のすべてのユーザーページを処理することです。また、noeoneがXSS攻撃を行うか、またはユーザーの無線LANホットスポットをハックしてセッションID。

実際には、クライアントブラウザ(プロキシ、イントールされたプラグインのリストなどでIPが問題になる可能性があるユーザエージェント、または何らかの種類のシグネチャを格納するなど)それの素敵なハッシュ。それをクッキーに保管し、時々チェックしてください。 編集:this questionへの私の答えを確認することもできます。&を追跡するいくつかの方法で、同じユーザーがセッションを使用していることを確認するために使用できます。

パスワードをセッションファイルに保存しないでください。決してパスワードを保存しないでください。

関連する問題