2016-06-22 5 views
-1

私の機能では、1行と1列が表示されるクエリが接続されています。私は次に実行したいpassword_verify()これは私が苦労しているところです。最初のパラメータとして、ユーザが入力した$passを配置しましたが、データベースから結果を取得して2番目のパラメータに配置する必要があります。PHP password_verifyが機能しない結果を得るために

どうすればよいですか?あなたはすべてを行う場合

function login($user, $pass){ 
    $conn = connect(); 
    $query = "SELECT password FROM account WHERE username = '$user' AND password = '$pass'"; 
    $result = mysqli_query($conn, $query); 
    if (mysqli_num_rows($result)=== 1){ 
     password_verify($pass, "$row[password]"); 
     session_start(); 
+0

デシベルであなたがハッシュされたパスワードを保存するので –

+3

うわー...あなたがPHPをお読みください-bookまたは何か.. – tkausl

+1

データフォームのクエリ結果をフェッチすることを忘れました – Saty

答えて

-1

誰かがあなたのウェブサイトに登録するときには、組み込みのPHP関数password_hash()を使用する必要があります。また、私は混乱を避けるためにあなたのデータベースに "password_hash"という名前を付け、 "password"には名前を付けることをお勧めします。

誰かがあなたのウェブサイトにログインしようとすると、組み込みのPHPのpassword_verify()を使用してハッシュされたパスワードとパスワードを比較する必要があります。

// Login function 
function login($user, $pass) 
{ 
    // Search the user by username 
    $conn = connect(); 
    $query = "SELECT password_hashed FROM account WHERE username = '$user'"; 
    $result = mysqli_query($conn, $query); 

    if (mysqli_fetch_row($result)) 
    { 
    // We found the user, check if password is correct 
    if(password_verify($pass, $result["password_hashed"])) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
    } 
    else 
    { 
    // We didn't find the user 
    return false; 
    } 
} 

- パスワードをデータベースに保存する際に、そのパスワードをハッシュする必要がありますか。ハッシュを使わずにパスワードを保存すると、データベースのパスワードは、登録時にユーザーが入力したのとまったく同じです。だから、ハッカーがデータベースに入ると、彼はすべてのユーザーのパスワードを見る。パスワードをハッシュすると、PHPはパスワードを完全に別のものにします。ハッカーがデータベースに入ると、パスワードは表示されませんが、まったく別のものが表示されます。

パスワードの確認機能は、ユーザーがログインしたときに必ず実行する方法です。ユーザーから受け取ったデータを入力するときは、セキュリティを追加することを忘れないでください($ _POST、$ _GET、$ _SESSION、。 ...)フォロー名でのユーザーの種類ときからです。?私の名前」DROPテーブルが占め、彼らはすべてのアカウント情報を削除します

+0

あなたは、ユーザーから提供されたデータを信頼していないという点について(かなり正しい)、あなたのコードはSQLインジェクションに対して脆弱であると主張します。 – timclutton

+0

これはpassword_verify()がSQLインジェクションではなく機能していないためです。 – Max

+0

人は怠惰です。彼らは単にあなたのコードをコピーして貼り付けます。 – timclutton

1

は右accountテーブルにであなたのpasswordフィールドがパスワードをハッシュ化されました。

関数の引数$passは単純なパスワードですと思います。

あなたはプレーンなパスワードによるユーザーを見つけることを試みるように、クエリ

SELECT password FROM account WHERE username = '$user' AND password = '$pass' 

は、任意のユーザーを見つけることはありません。

さらに、$row変数はで定義されていませんです。

function login($user, $pass){ 
    $conn = connect(); 
    // do not add password to query 
    $query = "SELECT password FROM account WHERE username = '$user'"; 
    $result = mysqli_query($conn, $query); 
    if (mysqli_num_rows($result) === 1){ 
     // define $row 
     $row = mysqli_fetch_assoc($result); 

     // set proper quotes and compare password 
     // from db with password input by user    
     if (password_verify($pass, $row["password"])) { 
      // do something if password is correct 
      session_start(); 

そしてもちろん、代わりにクエリに値を直接渡す、プリペアドステートメントを使用して起動します。

解決策は何ですか。

+0

準備したものを使用し、物語。多くの人があなたの最後の発言を読まずに単にそれをコピー&ペーストします。 – timclutton

関連する問題