2016-10-18 5 views
-3

私はしばらく研究していましたが、私のホスティング会社を助けてもらえましたが、私のウェブサイトからPHPコードとデータベースに問題がありました。私が持っているコードは、私が入力するパスワードをハッシュしますが、私は通常のパスワードを使用しようとすると、間違ったものとなります。しかし、ハッシュされたパスワードをコピーして貼り付けると動作します。データベースに行く前にパスワードをハッシュしてエラーが発生しました

<?php 
/* NEW.PHP 
    Allows user to create a new entry in the database 
*/ 
// creates the new record form 

// since this form is used multiple times in this file, I have made it a function that is easily reusable 

function renderForm($email, $pass, $error) 
{ 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd"> 

<html> 
<head> 
<title>New User</title> 
<link href="style.css" rel="stylesheet" type="text/css"> 
</head> 
<body> 

<?php 

// if there are any errors, display them 
if ($error != '') { 
    echo '<div style="padding:4px; border:1px soluser_id red;  color:red;">'.$error.'</div>'; 
} 
?> 

<form action="" method="post"> 
<div> 
<strong>Update User Info <br><br><br><br><br>Email: *</strong> 
<input type="text" name="email" value="<?php echo $email; ?>" /><br/> 
<strong>Password: *</strong> <input type="password" name="pass" value="<?php echo $pass; ?>" /><br/> 
<p>* required</p> 
<input type="submit" name="submit" value="Submit"> <br><br>Back to <a href="index2.html">home</a>?</div> 
</form> 
</body> 
</html> 
<?php 
} 

// connect to the database 
include('connect-db.php'); 

// check if the form has been submitted. If it has, start to process the form and save it to the database 

if (isset($_POST['submit'])) { 
    // get form data, making sure it is valuser_id 
    $email = mysql_real_escape_string(htmlspecialchars($_POST['email'])); 
    $pass = mysql_real_escape_string(htmlspecialchars($_POST['pass'])); 
    // check to make sure both fields are entered 

    if ($email == '' || $pass == '') { 
     // generate error message 
     $error = 'ERROR: Please fill in all required fields!'; 
     // if either field is blank, display the form again 
     renderForm($email, $pass, $error); 
    } else { 

     // save the data to the database 

     mysql_query("INSERT users SET email='$email', pass=MD5('$pass')") 
      or die(mysql_error()); 
     // once saved, redirect back to the view page 
     header("Location: view.php"); 
    } 
} else { 

    // if the form hasn't been submitted, display the form 
    renderForm('','',''); 
} 
?> 

私はデータベースに入力したときに、それをハッシュん見ることができますが、私は、パスワードにそれが最初に綴られた方法を使用しようとすると、それは間違ったものだと言われますとおり。

+4

パスワードを保存する前にパスワードをハッシュしてセキュリティを追加するつもりなら、 'md5'はひどい選択です。 BCryptを読んでください。 – Madbreaks

+0

MD5は無用なハッシュですが、最初にこれを動作させることができれば、別の方法を試してみると嬉しいです。 –

+4

データベースとのやりとりには準備済みの文を使用する必要があります。自分自身をSQLインジェクションまで開きます。 http://php.net/manual/en/pdo.prepared-statements.php – kyle

答えて

-5

私はPHP側でMD5ハッシングを行います。それがデータベースに入る前にそれを印刷し、ログインフォームで与えられた入力と比較しようとします。

この場合、htmlspecialcharsも必要ありません。あなたのエスケープは大丈夫ですから。奇妙な文字が含まれていると、データベースと一致します。

また、エンコードタイプが両方のページに設定されていることを確認し、同じものであることを確認してください。

-5

ログインフォームでSELECTクエリが表示されないと、MD5がハッシュ化しているかどうかを確認することもできますか?

mysql_query("SELECT * FROM users WHERE email='$email' AND pass=MD5('$pass')") 
or die(mysql_error()); 

ただし、パスワードハッシュにMD5を使用しないでください。チェックアウトhttp://php.net/manual/en/function.password-hash.php

+0

私は今それを理解していると思うので、ユーザーログを取得するには、入力したものがハッシュされ、それが自分のデータベースエントリと比較されることを確認したいのですか? –

+0

そのとおりです。 –

+2

@StevenEckあなたは本当にこのアプローチを使用してはいけません。あなたの質問の下のコメントをすべて読んで、これを警告し、 'password_hash()'(そしてそれについては 'mysql_'の使用法)のような実際のハッシュを推薦してください。あなたは "あなたはこれを最初に働かせたかった"と書いたが、もしあなたがそれを青くしたいのであれば、あなたはまずあなたの家を緑に塗るだろうか?それはうまくいかないために2倍の仕事です。 – Qirel

関連する問題