web-dev-qa-db-ja.com

セッションにパスワードを保存することは安全ですか?

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

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

14
Lithilion

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

セッション中に何かにパスワードを使用する必要がある場合は、プレーンテキストのパスワードを使用しないようにアプリを設計する必要がありますが、 key derivation function toパスワードからキーを取得します次に、機密タスクに使用します。これにより、ユーザーのパスワードを公開する機会が大幅に減ります。ユーザーが持っている唯一のセキュリティは、自分だけが知っているはずの自分のパスワードのsecrecyであることを覚えておいてください。

31
deceze

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


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

9
hek2mgl

一般的に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'
}
7
Shushant

パスワードをプレーンテキストで保存しない。それとは別に:はい、セッションは安全です。セッションはサーバーに保存されます。セッションデータ自体がブラウザに送信されることはありません。

wiseであろうと、セッションにパスワードを格納するために必要であろうと 、おそらくそうではありません。おそらくキャッシュの理由のためかもしれませんが、それでもそれは不安定です。

1
Halcyon