2013-09-23 54 views
1

我還是新的PHP,我不明白這裏有什麼問題。我有一個PHP腳本,我使用它作爲登錄腳本(簡單的功能,因爲我仍然在學習)。我確保表單中的輸入值與mysql數據庫中的值匹配。下面的代碼是造成問題的SQL:SQL選擇不與散列工作

"SELECT `id` FROM `golden_acres_username` WHERE `uname`='$username' AND `password`='$password_hash'" 

當我改變了上面的代碼,以低於它的工作原理的一個(不同的是,我手動插入MD5哈希值):

"SELECT `id` FROM `golden_acres_username` WHERE `uname`='$username' AND `password`='81dc9bdb52d04dc20036'" 

變量設置是:

$login_button = $_POST['login_button'];    
$username = $_POST['username']; 
$password = $_POST['password'];     
$password_hash = md5($_POST['password']); 

任何人都可以善意解釋我在這裏錯了。

回答

2

嘗試

"SELECT `id` FROM `golden_acres_username` 
WHERE `uname`='".$username."' AND `password`='".$password_hash."'" 
+0

工作就像一個魅力:)這對代碼有什麼影響? – joebegborg07

1

首先,你應該尋找一個更安全的密碼哈希機制類似password_hash()

其次,你有顯著SQL注入漏洞,目前因爲你是不是沒有使用參數化準備逃離輸入聲明。

真的不值得討論解決方案,直到你至少做到了這兩者中的後者。

+0

我只是在學習php,我相信我會在不久的將來在安全領域工作。 – joebegborg07

+0

@ joebegborg07如果你只是在學習,那很好。我只是建議你學習正確的方式來查詢數據庫以防止SQL注入。這應該是學習使用數據庫時首先考慮的問題之一。 –