2011-02-15 49 views
0

任何人都可以知道爲什麼這不工作?我得到「不匹配!」每當我嘗試登錄?數據庫中的密碼是md5散列,但是這應該將我記錄下來..先謝謝你。編輯:我也得到頭已經發送錯誤,這是第16行,session_start();未登錄..?

<?php 

session_start(); 

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

if ($username && password) 
{ 
include("scripts/connect.php"); 
mysql_select_db("table") or die("Could not connect"); 

$epass = md5($password); 
$query = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$epass'"); 

$nunmrows = mysql_num_rows($query); 

if ($numrows !== 0){ 

    while($row = mysql_fetch_assoc($query)){ 
     $dbusername = $row['username']; 
     $dbpassword = $row['password']; 
    } 
    //check match 
     if ($username == $dbusername && $password==$dbpassword){ 
      echo "You're in!"; 
     } 
     else 
      echo "Does not match!"; 

    } 
    else 
     echo "Not found"; 
} 
else 
    die("Please enter in a username and password?"); 

?> 
+0

您是否嘗試使用上面的腳本來回顯存儲在數據庫中的MD5散列和您生成的md5散列以進行比較? – diagonalbatman 2011-02-15 12:31:09

+0

用'$ username = mysql_real_escape_string($ username)'修復你的SQL注入漏洞;` – 2011-02-15 12:33:43

+0

檢查你是否打開了魔術引號,並且你的密碼中有一個特殊字符(例如')被自動轉義。 – 2011-02-15 12:34:01

回答

1

首先調查其值的所有變量都有,$username$password$dbusername

除此之外,您從數據庫中檢索密碼是MD5哈希值,所以你需要比較這個值與哈希而不是與明文密碼:

if($username == $dbusername && $epass==$dbpassword) 

但是當你已經在你的SQL查詢提供了這個條件,你可能也只是砸:

if($username == $dbusername) 
2

長話短說,因爲您將初始密碼值($密碼)與來自DB($ dbpassword)的散列值進行比較。

在任何情況下,這是一個可怕的代碼段,我甚至無法開始計算有多少個no-nos。

0
if ($username == $dbusername && $password==$dbpassword){ 
      echo "You're in!"; 
     } 

應該成爲(becouse $ DBPASSWORD被媒體鏈接使用MD5加密)

if ($username == $dbusername && $epass==$dbpassword){ 
      echo "You're in!"; 
     } 
0
if ($username == $dbusername && $password==$dbpassword) 

$dbpassword是哈希,$password是非哈希密碼。他們不匹配。

應該也不需要檢查密碼是否與代碼匹配,因爲它已經在數據庫中匹配。

除此之外,您的代碼中存在SQL注入漏洞。