2017-02-05 11 views
0

したがって、私はPHPで簡単なログインシステムをコーディングしています。PHPのpassword_verifyに問題があります

if ($hash == $hash2) { 

      $pass = password_hash($hash, PASSWORD_BCRYPT); 

     } else { 

      $message = "As password não são iguais.\\nTenta de novo."; 
    echo "<script type='text/javascript'>alert('$message');</script>"; 
    echo "<script type='text/javascript'>window.location = '../registo.php';</script>"; 
    echo "</script>"; 

     } 

$sql = "INSERT INTO user (hash) VALUES ('$pass')"; 

フォームログのために:ここ

は、登録コードはだ、私はクエリでデータベースの固定IDを使用しています簡単にするために(

<form class="form" id="formLogin" style="color:#ffffff" action="stuff/login.php" method="post"> 

    password: 
    <input name="password" id="password" type="password" placeholder="" style="background-color: #ffffff; color:#111111;" ><br> 
    <br> 
    <button type="submit" name="submit" id="btnLogin" style="padding-top: 5%; padding-bottom: 5%; color:#ffffff" class="btn btn-default outline center-block">Login</button> 
</form> 

マイlogin.phpとパスワードフィールドのみ)

require_once("db.php"); 
require("password.php"); 

if (!empty($_POST['password'])) { 

    $pass = htmlspecialchars($_POST['password']); 
    $id = 1; 
    $sql = "SELECT * FROM user WHERE id ='$id'"; 

    $res = mysqli_query($conn, $sql); 
    $row = mysqli_fetch_assoc($res); 
    $numRows = mysqli_num_rows($res); 
    $h = $row['hash']; 

    if($numRows == 1) { 
     if(password_verify($pass, $h)) { 
      header("Location: ../backoffice.php"); 
     } else { 
      $message = $pass . " " . $h; 
      echo "<script type='text/javascript'>alert('$message');</script>"; 
      echo "</script>"; 

     } 
    } else { 
     $message = "a palavra-passe e/ou nome de utilizador est\343o errados.\\nTenta de novo."; 
     echo "<script type='text/javascript'>alert('$message');"; 
      echo "window.location = '../index.php';"; 
     echo "</script>"; 
    } 
}; 

私はpassword_verifyのelse部分に$メッセージをエコーし​​ますay入力パスワードとデータベースハッシュの両方、彼らはokと思われます - ログインフォームから正しい文字列の結果、およびデータベースに格納されている正しいハッシュ。 しかし、それは動作しません。助言がありますか?

+0

'$パス=はhtmlspecialchars($ _ POST [ 'パスワード']);'なぜ? –

+0

@ MarkBakerは同じことを考えていましたが、代わりにfilter_input()を試してみてください。 –

+1

何もパスワードを変更する必要はありません。どのような形式のフィルタリングや操作でも、実際にはパスワードのエントロピーが減少しています –

答えて

0

それはあなたのpassword_verify機能に問題があるように思えます。パスワードをハッシュと照合しようとしている可能性があります。 id値を確認し、パスワードの文字がある場合は、htmlspecialcharsの機能をスキップしています。

+0

を追加するために質問を編集します。 – Zimutes

+0

[password_verify()](http://www.php.net/manual/en/function.password-verify.php)標準PHP関数であり、今はほぼ4年間でした。その目的は、平文のパスワードとそのハッシュ値を比較することです –