質問

PHPベースのログインシステムを開発しています。 各ユーザーにはID(番号)とパスワードがあり、ソルトハッシュとして保存されます。

ログインが成功したかどうかを判断することはできますが、その情報をどこかに保存する必要があります(ユーザーが永久にログアウトしないようにするためです)。

過去には、$ _ SESSION変数で遊んでいました。ただし、これらはユーザーがブラウザを離れると削除されるようで、望ましくありません。 また、「仮定」することはできません。ユーザーがシステムをだまそうとしないので、安全でなければなりません。

だから、ここに私の質問があります:

  1. $ _ SESSION または $ _ COOKIE を使用する必要がありますか?これらの各アプローチの主な利点は何ですか?
  2. 「記憶する」チェックボックスを実装する方法
  3. どの情報をセッション/ Cookie変数に保存する必要がありますか?

この特定の質問では、データベースセキュリティの問題は考慮されていません。

3に関して、私が正確に意味することは:

  • ユーザーのIDとハッシュされたパスワードをCookie /セッションに保存するか、
  • CookieとセッションにユーザーのIDとハッシュされていないパスワードを保存するか、
  • " SessionID"を保存する必要がありますか?パスワード(ハッシュ化されているか、ハッシュ化されていない?)または
  • " SessionID"、" ID"を保存する必要がありますか?パスワード(もう一度、ハッシュ化されているか、ハッシュ化されていない)?

ウェブサイトを可能な限り安全で効率的かつユーザーフレンドリーに保ちたい。 SessionIDベースのアプローチを採用する場合は、データベースに保存する方法に関する説明も歓迎します。

よろしくお願いします

編集:エランとブライアンの答えを合わせたものが必要なようです。残念ながら、そのうちの1つだけを承認済みとしてマークできます。どちらがより有用かを確認するために、先に進んで実装してみます。

役に立ちましたか?

解決

Eranの要点を繰り返しますが、セッションまたはCookieデータにユーザーパスワードやパスワードのハッシュを保存することはしない

一般に、Cookieを使用してWebアプリに記憶しておく機能を実装しました。 「安全な」構築に関する情報を始めるのに適した場所です。永続的なログインシステムは、金魚鉢のブログ投稿です。詳細な回答は、既に別のスタックオーバーフローの回答で説明されています。

ログインが安全であることを確認する必要がある場合は、httpsを使用する必要があります。これは、Cookieまたはセッションが暗号化されていない場合、盗まれる可能性があるためです。

もう1つの推奨事項は、2レベルのログインシステムです。これは、Amazonなどのサイトで確認できます。ログインせずにカートにアイテムを追加できますが、何らかの方法でアカウントをチェックアウトまたは編集する場合は、パスワードを再入力する必要があります。

他のヒント

機密情報(認証結果など)には、セッションのみを使用します。セッションはサーバー側に保存され、侵害される可能性ははるかに低くなります。

セッションの有効期間に関して、デフォルトはブラウザセッションの有効期間ですが、それを制御できます。これに影響する設定がいくつかあります:

session.gc_maxlifetime-セッションの有効期間を効果的に制御します。

session.gc_probabilityとsession.gc_divisorは、セッションガベージコレクションが行われる頻度を決定します。

そして最後-session.cookie_lifetimeは、セッションCookie(セッションIDを保持しているため、URLを介してトランミストする必要がないCookie)の有効期間を制御します。 session.gc_maxlifetimeの値と一致する必要があります。

また、パスワードをセッションまたはCookieに保存しないでください(ハッシュ形式でも)。認証の結果のみ。

IDを$ _SESSIONに格納しますが、ハッシュ化されたパスワードまたはハッシュ化されていないパスワードは格納しません。ユーザーがログインし、IDが$ _SESSIONに保存されたら、パスワードはもう必要ありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top