2012-10-01 58 views
1

下面的代碼來自用PHP編寫的登錄腳本。它檢查密碼的數據庫使用MD5加密密碼,但是當登錄腳本針對數據庫檢查密碼時,它將檢查未加密的原始密碼。我熟悉的MD5()函數,但我會如何將此主題融入如下:如何使用PHP對MD5加密此密碼?

<?php 
session_start(); 

$username = $_POST['username']; 
$password = $_POST['password']; 

if ($username && $password) { 
    $connect = mysql_connect("host", "user", "password") or die("Couldn't connect"); 
    mysql_select_db("dbname") or die("Couldn't find the database"); 

    $query = mysql_query("SELECT * FROM users WHERE username='$username'"); 
    $numrows = mysql_num_rows($query); 

    if ($numrows != 0) { 
     while ($row = mysql_fetch_assoc($query)) { 
      $dbusername = $row['username']; 
      $dbpassword = $row['password']; 
     } 

     if ($username == $dbusername && $password == $dbpassword) { 
      echo "You're in! Click <a href='../member.php'>here</a> to enter the member page."; 
      $_SESSION['username'] = $username; 
     }else{ 
      echo "Incorrect password"; 
     } 
    }else{ 
     die("That username does not exist."); 
    } 
}else{ 
    die("Please enter a valid username and password."); 
} 
?> 
+0

將'$ password == $ dbpassword'改爲'md5($ password)== $ dbpassword'應該可以。 –

+5

您的代碼容易受到着名的SQL注入攻擊。 – Zaffy

+0

仍然在使用mysql_escape_real_string()的東西,以及 – user1710563

回答

5

你應該檢查和查詢數據庫進行匹配,而不是把結果下來並在本地檢測它們。隨着中說:

$password = md5($_POST['password']); 

隨後還更改:

SELECT * FROM users WHERE username='$username' AND password='$password' 

但我也想看看用PDO,而不是直接在SQL查詢中放置值。至少你應該使用mysql_real_escape_string來避免注入攻擊。

+6

我也建議不要使用MD5,因爲它幾乎沒有安全性。 bcrypt或PBKDF2 –

+0

@ExplosionPills對,或者用鹽。但更好的是用鹽更強。 – Zaffy

0
$salt=sha1($postpassword); 
    $arr= strlen($postpassword); 
    $count=ceil($arr/2); 
    $stringarr=str_split($postpassword,$count); 
    $password1=hash("sha512", $stringarr['0']); 

    $password2=$salt . (hash('whirlpool', $salt . $stringarr['1'])); 
    return $password1.$password2; 
+0

<?PHP 類密碼{ \t \t \t \t \t \t //得到一個新的哈希密碼 \t公共職能STRINGBREAK($ postpassword) \t { \t \t $鹽= SHA1($ postpassword ); \t \t $ arr = strlen($ postpassword); \t \t $ count = ceil($ arr/2); \t \t $ stringarr = str_split($ postpassword,$ count); \t \t $ password1 = hash(「sha512」,$ stringarr ['0']); \t \t \t \t $ password2 = $ salt。 (hash('whirlpool',$ salt。$ stringarr ['1'])); \t \t return $ password1。$ password2; \t} \t \t \t } ?> – user2990791