2017-05-02 13 views
0

私はPHPMySQLの初心者です。私はMySQL 5.7 DBでユーザ入力(ユーザ名とパスワード)を検証しようとしていますが、チャンスはありません。私の問題を説明しましょう。PHPを使用してMysql 5.7のユーザーの資格情報を確認

firstdbにユーザ名:firstuserパスワード:firstpasswordからphpMyAdminページを作成しました。

CODE(check_user-pass.php)

<?php 
ob_start(); 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password="rootpassword"; // Mysql password 
$db_name="firstdb"; // Database name 
$tbl_name="mysql.user"; // Table name 

$conn = new mysqli($host, $username, $password, $db_name); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
echo "Connected successfully"; 

// Define $username and $password 
$myusername=$_POST['EMail']; 
$mypassword=$_POST['Password']; 


// To protect MySQL injection (more detail about MySQL injection) 
$myusername = mysqli_real_escape_string($conn,$_POST['EMail']); 
$mypassword = mysqli_real_escape_string($conn,$_POST['Password']); 


$sql="SELECT * FROM $tbl_name WHERE user='$myusername' and authentication_string='$mypassword'"; 
$result = $conn->query($sql); 

$count = 0; 

// Mysql_num_row is counting table row 
if ($result = mysqli_query($conn, $sql)) { 

    /* determine number of rows result set */ 
    $count = mysqli_num_rows($result); 

    printf("Result set has %d rows.\n", $count); 

    /* close result set */ 
    mysqli_free_result($result); 
} 

// If result matched $username and $password, table row must be 1 row 
if ($count==1) { 
    echo "Success! $count"; 
} else { 
    echo "Unsuccessful! $count"; 

} 

ob_end_flush(); 
?> 

コードリターン:and authentication_string='$mypassword'コードリターン:Connected successfullyResult set has 0 rows. Unsuccessful! 0

私はこの行を削除する場合Connected successfullyResult set has 1 rows. Success! 1

私は正常にindex.phpからユーザー入力を取得するo check_user-pass.phpしかし、mysql.userテーブルには、データベースの照合のための明確なパスワード列はありません。

ネットで検索して検索します。 password列が5.xではauthentication_stringに変更されましたが、この列はハッシュされたものを保持します。だから私はこれとユーザーのパスワードを一致させることはできません。

質問1

iは、テーブルを作成し、検証するためのDB内のすべてのユーザーのユーザー名とクリアパスワードを保存すべきか? question1答えがNOであれば

質問2

、どのようにこの検証の問題を達成することができますか?

+4

_store [...] clear password_ - NO!どのような状況においても決して決してクリアなパスワードを保存することは決してありません。 – Marvin

+0

でも同じと思います。 –

+1

パスワードをエスケープすることはお勧めできません。特に '123 '\ abc'のようなものは完全に有効です。これらをエスケープすると、 'password_hash()'を使ってハッシュされたパスワードを保存する場合、 'password_verify()'に失敗して '123 \ '\ abc'として書き換えられます。どちらの場合にも;それでも失敗する。 –

答えて

-2

私は&比較パスワードを格納するためにこれを使用して、あなたはボックス認証のうち、最も簡単なため https://github.com/wazimshizm/secure-login

興味があるなら、私はちょうどそのgithubの上で、自分のためにクラスを書いた人々のために非常に多くのログインを行ってきました:

password_hash($passwordVariable, PASSWORD_DEFAULT); 
password_verify($inputPassword, $storedPassword); 
+0

確かにこれをチェックします。しかし、実際には、資格情報の照合に関する基本的なことを学びたい。とにかくありがとうございました。 –

+0

が答えを更新しました。パスワードに必要なものすべて – Wazimshizm

関連する問題