2017-01-09 19 views
0

私が作業しているサイトは、ハッシュフォームで電子メールアドレスをpassword_hash() であることが分かりましたが、そのサイトはすでに稼働しています。データベースにハッシュされた電子メールアドレスを確認してください

新しいユーザーが登録しようとすると、ユーザーが使用している電子メールアドレスがデータベースにないかどうかを確認する必要があります。しかし、すべての電子メールアドレスがハッシュされているので、私は単純に使うことができません:

$mail_query = mysql_query("SELECT email FROM userbase WHERE email='$email'"); 
        $mail_num = mysql_num_rows($mail_query); 
        if ($mail_num != 0) { 
        $error = 'This email address is already in use.'; 

これを行う方法はありますか?

サイトで古いMySQL APIが使用されています。

+4

もしあなたが実際に*行う*安全な方法でpassword_hashを使用しているなら、あなたは*毎回検索してテストしなければなりません。シングル。郵便物。 *。あなたのデータベースに。ごめんなさい。問題は次のとおりです。*なぜあなたは電子メールアドレス*をハッシュしますか?もしあなたが欲しいのであれば、あなたは何をしますか?私は知っています、不条理なアイデア - あなたのユーザーの一人に*電子メール*を送りたいですか? –

+0

このアイデアは、データベース侵害の場合にユーザーの電子メールアドレスが判読不能のまま残ることになりました。 – Menel

+0

どのようにしてユーザーに電子メールを送りますか? – Sammitch

答えて

1

唯一の方法が、非常にbaaaadは申し訳ありませんが、でもMySQL_ *関数を覚えているが、最初のあなたは、このようなクエリを実行する必要はありません... AAAAALLLLメールを取得し、それらすべてをチェックすることです:

SELECT email FROM userbase

あなたが得るとき

し、その後、すべての電子メールは、ループを行うと、一つ一つのメールにpassword_verifyを使用して...だからあなたのループであなたのような何かを持っている必要があります。それだけです

if(password_verify($email,$hash)) { 
    echo "Email is already in use!"; 
    break; 
} 

を。がんばろう。しかし、私はそのようなハッシュを好きではありません:あなたはユーザーのパスワードを思い出させる必要がある場合?

+3

「ユーザーにパスワードを思い出させる」?安全なハッシュされた電子メールアドレスの隣にプレーンテキストとして保存されていた古いパスワードを送信しますか? *決してパスワードを思い出させません。*パスワードをリセットするだけです。 ;) –

+0

@FranzGleichmannよ、申し訳ありません。私の英語は...; Dええ、もしあなたが欲しいのであれば、password_hashでハッシュ化されたパスワードを思い出させることはできません:D – Danielius

+0

@FranzGleichmann私は彼が "あなたのユーザーにパスワードリセットリンク/トークンをどのようにメールしますか?または、その点については、まったくメールを送ってください。 – Sammitch

関連する問題