0

簡単に言えば、私は社内のレポート エンジンを開発しています。これは完全に Web ベース (PHP およびさまざまな AJAX 技術を使用) であり、MySQL データベースに格納されたデータを弊社の製品ソフトウェアによって解釈します。これは Ubuntu 8.04 サーバーで実行され、すべての従業員がそのマシンで Linux ユーザー アカウントを持っています。pam_auth を使用して、ユーザーに Linux ユーザー アカウントでのログインを強制し、特定のレポートにアクセスするための適切なグループに属しているかどうかを判断するログイン システムをセットアップしました。

その部分はうまく機能します。ここでの問題は、Cookie を使用して「私を覚えている」機能を追加することです。ユーザーが時間を節約し、セッションが期限切れになるたびにログインしなければならないという煩わしさを軽減するために、ユーザーが 30 日間の Cookie を持っていることを望みます。コードの「remember me」部分を書きましたが、Cookie は問題なく保存されます。ユーザー名とパスワードの md5 ハッシュのみを保存しています。ここでの問題は、それらを再認証するときです。通常は、保存されたユーザー名をデータベースから取得したそのユーザーのパスワード ハッシュと比較することで、単純にこれを行います。複雑なのは、ユーザー名とパスワードのハッシュに直接アクセスできないことです。それらはすべて /etc/passwd および /etc/shadow に保管され、ログインは PAM モジュールによって処理されます。pam_auth は、プレーン テキストのユーザー名とプレーン テキストのパスワードを想定しています。

私の唯一の選択肢は、パスワードをプレーンテキストとして保存するか、可逆的な暗号化を使用することのようですが、私はこれらのアイデアのどちらも特に好きではありません.

ここにもっと良い解決策はありますか?

4

1 に答える 1

0

使用できる別のオプションは、PHP の組み込みセッション管理です。次に、ユーザーのコンピューターに設定する必要がある唯一の Cookie は、PHP が自動的に行うセッション ID です。

「session.cookie_lifetime」と「session.gc_maxlifetime」の 2 つの ini 設定を変更することで、PHP セッションの長さを少なくとも 30 日に設定できます。次に、ユーザーがログインすると、そのユーザー名と、session_start() を呼び出した後に $_SESSION スーパー グローバル配列にログインしたときに保存できます。ユーザーが戻ってきたときに、$_SESSION 配列の値をチェックして、ユーザーがログインしたかどうか、30 日以内にログインしたかどうかを確認できます。

この時点で他の理由で PAM 認証が必要な場合は、パスワードをセッション変数にクリア テキストまたは可逆暗号化として保存する必要があります。これは理想的ではありませんが、ユーザーのブラウザーの Cookie よりも安全です。詳細については、PHP セッション - マニュアルを参照してください。

于 2010-01-08T22:31:43.653 に答える