2011-01-26 27 views
0

我在這裏使用了一個教程:http://www.phpeasystep.com/phptu/26.html爲我的網站創建一個登錄表單。我已將數據庫中的uPassword字段設置爲md5,並且數據庫中的所有密碼均使用md5加密。PHP MD5創建用戶表格

登錄工作正常,但是我對創建註冊表單略有困惑。

表單要求用戶輸入他們想要的密碼。我對我將如何獲取用戶輸入的密碼,將其轉換爲md5,然後將md5密碼輸入到用戶表的uPassword字段中稍有困惑。

下面是我對processresgistration.php文件的代碼:

/* Database connection info*/ 
mysql_select_db("dbname", $con); 

$encryptedpassword = md5($_POST['uPassword']); 

md5($uPassword); 

$sql="INSERT INTO users (uName, uPassword, uSurname, uFirstName) 
VALUES 
('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]'"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "Account created. You can now login"; 

mysql_close($con) 
?> 

上面的代碼應該是:

  • 創建一個名爲encryptedpassword
  • 使用uPassword爲encryptedpassword變量
  • 將加密密碼轉換爲MD5
  • 輸入MD 5密碼進入用戶表,因爲uPassword

我確定我沒有在某處使用正確的變量,或者我的語法做了一個簡單的錯誤;任何意見/幫助非常感謝!

謝謝, 克里斯 - 中號

+0

你收到任何輸出?第一行有錯誤,在第一行添加尾部/ ... – powtac 2011-01-26 10:41:16

+0

防止SQL注入http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in- php – acm 2011-01-26 10:45:48

+1

Wow,_two_ weaknesses(md5 _and_ unsalted password hash!)and _three_ remote exploitable [SQL Injection](http://en.wikipedia。org/wiki/SQL_injection)大概有九行代碼。這應該是某種記錄。我希望。 :) – sarnold 2011-01-26 10:47:33

回答

0

您的代碼需要一些驗證&逃逸,更像這樣:

<?php 

/* Database connection info */ 
mysql_select_db("dbname", $con); 

if ($_REQUEST['METHOD'] == 'POST') { 
    $uName = filter_input(INPUT_POST, 'uName'); 
    $uPassword = filter_input(INPUT_POST, 'uPassword'); 
    $uSurname = filter_input(INPUT_POST, 'uSurname'); 
    $uFirstName = filter_input(INPUT_POST, 'uFirstName'); 

    // do some validation here ... 

    // if everything OK, then crypte the password 
    $hashedPassword = md5($uPassword); 

    // and store it 

    $sql = sprintf(
     'INSERT INTO users (uName, hashedPassword, uSurname, uFirstName) 
     VALUES (%s, %s, %s, %s);', 
      mysql_real_escape_string($uName, $con), 
      mysql_real_escape_string($hashedPassword, $con), 
      mysql_real_escape_string($uSurname, $con), 
      mysql_real_escape_string($uFirstName, $con) 
    ); 

    if (!mysql_query($sql,$con)) { 
     die('Error: ' . mysql_error()); 
    } 

    mysql_close($con); 
    echo "Account created. You can now login"; 
} 

?> 

現在對於登錄

<?php 

if ($_REQUEST['METHOD'] == 'POST') { 
    $uName = filter_input(INPUT_POST, 'uName'); 
    $uPassword = filter_input(INPUT_POST, 'uPassword'); 
    $hashedPassword = md5($uPassword); 

    $sql = sprintf(
     'SELECT * FROM users WHERE uName = "%s" AND hashedPassword = "%s" LIMIT 1', 
      mysql_real_escape_string($uName, $con), 
      mysql_real_escape_string($hashedPassword, $con), 
     ); 

    // etc etc ... 
} 
?> 
0
/* Database connection info* 

您沒有正確關閉您的評論出現。在行尾添加/

哦,MD5是不安全的。改用SHA1。或者甚至更好,使用鹽醃的SHA1。

您還需要開始轉義您使用mysql_real_escape_string()Little Bobby Tables將數據庫放入您的數據庫的所有用戶輸入將對您的數據庫有很多樂趣。

0

/*數據庫連接信息*/

mysql_select_db("dbname", $con); 

$encryptedpassword = md5($_POST['uPassword']); 

$sql="INSERT INTO users (uName, uPassword, uSurname, uFirstName) 
VALUES 
('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "Account created. You can now login"; 

mysql_close($con) 
?> 

支架的關閉是在查詢中的問題

('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]'"; 

這需要關閉') '