私はすべてのアプリケーション全体でセッションを使用しています。私はそれらをはるかに安全にしたい。現在、$username = $_SESSION['username'];
などのコードを使用しています。
セッションをより安全にする方法を教えてください。
私はすべてのアプリケーション全体でセッションを使用しています。私はそれらをはるかに安全にしたい。現在、$username = $_SESSION['username'];
などのコードを使用しています。
セッションをより安全にする方法を教えてください。
最初に気にかけたいことは、Session Hijackingです。
コンピュータサイエンスでは、セッションハイジャックとは、有効なコンピュータセッション(セッションキーとも呼ばれることもあります)を利用して、コンピュータシステム内の情報やサービスに不正アクセスすることを指します。特に、これは、ユーザーをリモートサーバーに認証するために使用されるマジッククッキーの盗難を指すために使用されます。多くのWebサイトでセッションを維持するために使用されるHTTPクッキーは、仲介コンピュータを使用する攻撃者や犠牲者のコンピュータ上の保存されたクッキーへのアクセスによって容易に盗まれる可能性があるため、Web開発者にとって特に関係します(HTTP cookie theft参照)。
あなたのウェブサイトへの訪問者(アリス)は、セッションクッキーとセッションIDを持っている場合基本的な考え方は、(のは、それが12345
だと仮定しましょう)、で、その後悪意のあるユーザ(マロリー)は、アリスのセッションIDを知ることができる場合JavaScript、トラフィックスニッフィング、ソーシャルエンジニアリング、またはその他の方法のいずれかを介して、Malloryはあなたのサイトをブラウズし、彼のセッションIDを12345
に設定し、効果的にAliceになります。
これを防ぐ1つの方法は、すべてのリクエストでセッションIDを変更することです。これはPHP session_regenerate_id
functionで行うことができます。すべての要求の冒頭でsession_start()
と呼び出した後、session_regenerate_id
に電話することは非常に複雑なトピックであることにご注意ください。私はウィキペディアの記事を読んで、あなたがその問題を完全に理解できるようにすることを強くお勧めします。
EDIT:私はあなたのためのより多くの情報を入力することを約あったが、その後、私はあなたの質問は本当に重複of this StackOverflow questionであることに気づきました。私は出発点としてそれを読むことをお勧めしたいと思います。
データベースでmd5バージョンのパスワードを使用し、md5でセッションパスワードを暗号化します。その結果、パスワードが正しい場合、これらの2つの値は同じになります。
これは、保護しようとするものによって大きく異なります。セッションに含まれる情報が公開または変更される可能性があることを心配している場合は、サーバーによってのみ表示および変更できるため、セッションに関する情報を心配する必要はありません。
あなたは何人かの人々が他の人のセッションを使用することができる可能性を心配している場合は、次の操作を行うことができます。
+1よりも、セッションIDを偽装するほうが簡単です!まあ、まあ、あなたが私の意味を知っている;-) – Josh
を使用しているあなただけの変数に値を代入していることを確認します。範囲外のこのコードはそれほど重要ではありません。なぜあなたのアプローチは安全ではないと思いますか? –
ログイン時にクライアントのIPアドレスとブラウザのUser Agentをセッション変数に格納することもできます。これにより、後続の各要求でこれを確認できます。 XSSのIPアドレス – dirkbonhomme