4

私は PHP でログイン システムを作成していましたが、疑問に思いました: なぜセッションが必要なのですか?

ユーザー ID とセッション ID を使用して Cookie を保存すると、ユーザー ID とパスワード ハッシュを使用して Cookie を保存する場合とまったく同じセキュリティ リスクが発生しませんか (パスワード ハッシュが十分に強力である場合)。ええ、誰かが Cookie を盗む可能性はありますが、sessionid Cookie を盗んだ場合も同じではありませんか?

すべての (合理的に安全な) ログインシステムでセッションを使用する理由を誰か教えてもらえますか?

4

6 に答える 6

3

セッションの利点の 1 つは、誰かがログインするたびに、さらにはユーザーの訪問中に定期的に新しいセッションを生成できることです。ユーザー ID とパスワードのハッシュだけを使用した場合、誰かがあなたの Cookie を盗むとすぐに、あなたとして無期限にログインできるようになります。セッションの有効期限が切れます。

于 2010-07-30T16:34:16.603 に答える
1

ページ要求ごとにユーザー資格情報が検証され、ログイン フォームはこれらの資格情報をブラウザーに保存するためだけに使用される設計について説明します。このような珍しいアプローチにはいくつかの問題があります。

  • HTTP リクエストごとに機密情報を送信します。
  • 資格情報を検証するには、データベース クエリを実行する必要がある可能性があり、それを何度も何度も実行します。
  • リクエストの送信者を知るためだけに、資格情報を検証する必要があります。
  • 同じ認証情報での同時接続はデータを共有します[補遺を参照] .

ユーザーを一度検証し (暗号化されたチャネルまたはハッシュされた情報を使用する可能性があります)、指定された期間それを記憶する方が一般的です。

いずれにせよ、セッションと Cookie はまったく別のツールです。セッションがサーバー側であるのに対し、Cookie はクライアント側のストレージです。最も典型的なセッションの実装では Cookie を使用してセッション ID を保存するため、それらは互いに関連するだけです (HTTP はステートレス プロトコルであるため、どのリクエストが誰から来たのかを追跡するには、このようなトリックが必要です)。サーバー側ストレージの利点は、それを完全に制御できることです。

  • 必要なだけスペースを使用できます。
  • 必要なデータ形式を使用できます。
  • 機密データや、ユーザーに見られたり改ざんされたりしたくないものを保持できます。
  • 情報をそこに置いたので、信頼できます。

補遺

セッションの開始時にランダム ID を割り当てる従来のセッション システムでは、登録ユーザーは異なるコンピューター (または、1 台のコンピューターでも、たとえば Firefox で 1 つ、Chrome のシークレット モード ウィンドウで 3 つ) で多数の同時セッション インスタンスを持つことができます。訪問者をユーザー名だけで識別した場合、ユーザーはセッションを 1 つだけ持つことになります。訪問者が昼食のために家に帰ると、職場で残したセッションを見つけ、友人とパスワードを共有すると、友人が誰であるかを確認できます。やっています。これはバグまたは機能と見なすことができ、もちろん、それを防ぐための多くのトリックがあります。それを考慮してください。

于 2010-07-30T16:54:55.133 に答える
1

ハッシュを作成するのではなく、セッション ID を暗号化して、復号化してタイムアウトかどうかを確認できるようにします。

また、IPアドレスに関連付けられている場合は、より安全にすることができます.

または、ユーザーが移動したいページごとにログインするだけにすることもできます。

解決策が実際にユーザーのすべての情報を取得するJavaScriptアプリを使用することである場合、ユーザー名/パスワードはJavaScriptに保存されます。次に、すべてのページ要求またはインタラクションに対して、ユーザー名/パスワード、または初期認証の結果であり、上記のように暗号化されたトークンのいずれかを渡します。

そうすれば、セッションは必要ありません。ユーザーがそのタブを閉じると、ユーザーの情報は失われるため、セキュリティ リスクはありません。

セッション ID は、javascript ですべてを行うよりも単純なので、ほとんどの人はセッションを選択しますが、そうする必要はありません。

于 2010-07-30T16:43:56.243 に答える
0

ユーザーIDとセッションIDを使用してCookieを保存する場合、ユーザーIDとパスワードハッシュを使用してCookieを保存するのとまったく同じセキュリティリスクが発生しませんか(パスワードハッシュが十分に強力である場合)?ええ、誰かがCookieを盗む可能性がありますが、セッションID Cookieを盗んだ場合も同じではありませんか?

はい、それは潜在的に同様のリスクです。クッキーを盗むことは、いくつかの理由でそれほど深刻ではないと主張されるかもしれません:

  • セッションCookieの有効期間は短くなります。
  • ユーザーはサイト間でユーザー名/パスワードを頻繁にリサイクルします。これにより、資格情報が傍受された場合に、より多くのユーザーが公開される可能性があります。
  • セッションでは、実際にはユーザーがユーザー名/パスワードと同じことを実行できない場合があります。たとえば、サイトでは、ある時点でユーザーが自分の資格情報を再入力する必要がある場合があります。
  • サイトは、セッションの有効性を1つの特定のIPに制限する場合があります。

しかし、はい、セッションCookieを盗まれるのは、状況によっては、ユーザー名/パスを盗まれるのと同じくらい深刻な場合があります。盗まれたクレデンシャルに対して確実なセキュリティを確保するには、ユーザーとWebサーバー間のすべてのトラフィックを暗号化(https)する必要があります(認証する前であっても)。そうしないと、アクティブな攻撃者がactionフォーム送信の変更を行い、ユーザーがクレデンシャルを入力して次のことを行う可能性があります。安全なチャネルを介して投稿されないようにします)。

于 2010-07-30T16:47:03.977 に答える
0

すぐに期限切れになるように、または必要に応じて今から 1 年後に期限切れになるように設定できる Cookie。ブラウザを閉じると、セッションはすぐに期限切れになります。このため、一般的にはより安全です。この特定のシナリオでは、有効期限の長さと、一方がクライアント マシンに「物理的に」保存され、もう一方がメモリに保存されるという事実を除いて、重要な違いは実際にはありません。

于 2010-07-30T16:34:20.800 に答える
0

より安全な期間です。

セッションでは、情報はサーバーに保存されるため、誰かが何らかの情報を保持しようとすると、さらにいくつかの手順が必要になります。Cookie を使用すると、サーバー リクエストを必要とせずに、誰でもローカル マシンから直接情報を取得できます。

于 2010-07-30T16:42:27.637 に答える