18

セッションで頻繁にパスワードを使用する必要があります。パスワードで暗号化されたキーでユーザーデータを暗号化しています。それで私の質問があります。プレーンテキストのパスワードを php セッションに保存するのは安全ですか (Cookie ではないため、クライアント側ではありません)? より良い方法はありますか?または、毎回ユーザーにパスワードを尋ねる必要がありますか?

phpseclib を使用して、rsa の秘密鍵をユーザーパスワードで暗号化します。キーにアクセスするたびに、パスワードが必要です。私には 2 つのオプションがあります。パスワードまたはキーのどちらかを保存しますが、どちらもあまり良くないと思います。暗号化にパスワードハッシュを使用できません。ハッシュがデータベースの「プレーンテキスト」に保存されているためです...

4

4 に答える 4

35

プレーンテキストのパスワードをどこにでも保存することは、通常は悪い考えです。セッション自体は安全ですが、サーバー環境の残りの部分と同じくらい安全です。管理者またはその他の正当なユーザーと悪意のあるユーザーが、そこに保存されているデータにアクセスできる可能性があります。避けられるのであれば、顧客の秘密を扱いたくありません。これは、どのような状況でもユーザーのパスワードが表示されないようにする必要があることを意味し、プレーンテキストのパスワードが技術的に可能な限り短命になるようにコードを作成する必要があります。

セッション中に何かにパスワードを使用する必要がある場合は、平文のパスワードを使用しないようにアプリを設計する必要がありますが、キー導出関数を使用してパスワードからキーを導出し、機密タスクに使用します。これにより、ユーザーのパスワードが漏洩する可能性が大幅に減少します。ユーザーが持つ唯一のセキュリティは、ユーザーだけが知っているはずのパスワードの秘密であることを忘れないでください。

于 2013-10-25T15:52:13.613 に答える
11

その場合、ハッカーがサーバーにアクセスすると、パスワードがプレーン テキストで表示されます。プレーン テキストのパスワードを保存しない (どこにでも)


一般質問について。ユーザーに一度パスワードを尋ね、暗号化されたパスワードをデータベースに保存されている暗号化されたパスワードと照合します。それらが同じである場合は、新しいセッションを開始します。ユーザーが次にサイトにアクセスしようとしたときに、このユーザーのセッションが存在するかどうかを確認します。したがって、セッションにパスワードを保存する必要はありません。

于 2013-10-25T15:48:13.377 に答える
8

MD5一般的にSHA家族が直接使用することを避けるべきデータベース以外の場所には、いかなる種類の機密データも保存しないでください。

次に、解決策は何ですか?

認証システムを実装している場合は、クライアント情報 (通常はユーザー名とパスワード) を比較し、特別なトークンを作成してセッションまたは Cookie に保存します。

if ($username == 'someuser' AND $password == 'somepassword_hash'){
    $token = md5(uniqid());
    // database query with along with user_id and token
    $_SESSION['_token'] = $token;
}

トークンの比較

functon varifyToken($token){
    
    // database query here
    // SELECT user_id FROM sessions WHERE token = 'token_here'
}
于 2013-10-25T15:56:56.417 に答える
3

パスワードを平文で保存しないでください。それはさておき: はい、セッションは安全です。セッションはサーバーに保存されます。セッション データ自体がブラウザに送信されることはありません。

パスワードをセッションに保存することが賢明であるか必要であるかにかかわらず、おそらくそうではありません。キャッシュの理由かもしれませんが、それでも不安定です。

于 2013-10-25T15:46:34.950 に答える