2013-03-30 78 views
-1

所以我正在玩我的簡單登錄系統,有一件事我似乎無法弄清楚爲什麼登錄允許我創建一個只有用戶名的帳戶,並將這些數據發送到我的數據庫事件,雖然我指定

if($_SERVER['REQUEST_METHOD'] == 'POST') { 
$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string(md5($_POST['password'])); 

if(empty($username)) { 
     echo("Du ma fylle inn et brukernavn!"); 
} { 
if(empty($password)) { 
     echo("Du ma fylle inn et passord!"); 
     } else { 

當我刪除(在逃跑字符串的MD5,它的工作原理,但後來沒有加密,密碼是在數據庫中可見,所以它是一種反之亦然..任何人看到我的錯誤或錯誤理解在哪裏?

QUICK SUM:它應該給出「你需要填寫密碼」,但是當我在字符串中解密md5時不會這樣做,但是當我刪除它時,它允許我。

+1

不要用哈希MD5密碼字段爲空。使用Bcrypt或pbkdf2。 MD5是不夠的。 – Blender

回答

0

你可以檢查,如果你指定MD5-

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    if (mysql_real_escape_string(empty($_POST['password']))) { 
     // do nothing 
    } 
    else 
    { 
    ` $username = mysql_real_escape_string($_POST['username']); 
     $password = mysql_real_escape_string(md5($_POST['password'])); 

     if(empty($username)) { 
      echo("Du ma fylle inn et brukernavn!"); 
     } { 
     if(empty($password)) { 
      echo("Du ma fylle inn et passord!"); 
     } else { 
     } 
    } 

前}

+0

非常感謝大家!得到了修正,特別感謝Kev和Femaref的更深入。 – Raegon

+0

我收回,仍然無法修復它。我沒有在某個地方放置一個結局.. ?> – Raegon

2

md5將導致一個字符串,即使輸入爲空。你需要檢查原始輸入,直接從$_POST。如果您想驗證輸入,請在處理之前進行檢查,因爲後續處理(如您在本例中所見)可能導致非空變量,即使原始輸入爲空。

1

一個空字符串仍然有一個MD5哈希,所以你得到一個正確的檢查,密碼等於某事。

2

md5將編碼ANYTHING,甚至是一個空字符串。無論如何,這將使變量「非空」。

含義:首先檢查空,然後編碼您的密碼。

相關問題