password_verify()を有効にしようとすると、一晩中50以上のリンクを真剣に過ごしたので、私はこの質問を軽視しませんでした。PHP password_verify()
1-ハッシュは100%正しいです。
2プレーンテキストVerisonは100%正解です。
3ハッシュ長さは事実上60.
4試したPassword_DefaultとPassword_Bcrypt
5パスワードをデータベースから引き出しました。
しかし
if(password_verify($answer,$secAnswer)){ } IS ALWAYS false.
ここに私のコードです。
function anti_injection_login($sql, $formUse = true){
$sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|,|'|#|\*|--|\\\\)/i","",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
if(!$formUse || !get_magic_quotes_gpc())
$sql = addslashes($sql);
return $sql;
}
$email = anti_injection_login($_POST['email']);
$answer = anti_injection_login($_POST['answer']);
$queryAccount = mysqli_query($conn, "SELECT * FROM Accounts where email= '$email'");
$count = mysqli_num_rows($queryAccount);
if($count == 1){
$rows = mysqli_fetch_array($queryAccount);
$secAnswer = $rows['secretkey'];
if(password_verify($answer,$secAnswer)){
echo "Successful";
}else{
echo "Try Again";
}
}
anti_injection_loginは、人に注射を停止させるだけです。 これは問題ではありません。
$ secAnswerと$ answerでエコーをどこに置いても、私はそれがいつも正しいと思います。
私には恋人がいませんか? 私は今これに真剣に困惑しています。
(はい、これはスクリプト全体です)。だから私は何も残していません。 しかし、前述したように、それは正常にハッシュを引っ張っています(そして正しい)。
私がハッシュに使用した単語は、同じです(大文字と小文字の両方を試してみました)。
準備文を使用してください。あなたは自分の衛生設備を転がす必要はありません。 –
'$ rows ['secretkey']'には何が含まれていますか(例を示します)。 'secretkey'ハッシュをどのように生成するかを示します。パスワードが 'aliform_at_insert'のようなものであれば、あなたの' anti_injection_login'は私のログインを壊すでしょう – Justinas
申し訳ありません、 'anti_injection_login()'はあなたのサイトをハックするよう求めています。準備文はあなたが必要とするものです*。 – alex