2011-08-03 129 views
0

我只是通過一些代碼,並確保所有的用戶輸入符號通過mysql_real_escape_string()來防止sql注入。對於通過PHP的MD5 run()函數輸入密碼,是mysql_real_escape_string(仍需0?這似乎是在編碼過程將擺脫潛在注入攻擊。mysql_real_escape_string()仍然需要md5()?

回答

2

其實,yes和no。

你只有需要使用mysql_real_escape_string()如果你設置的md5()true第二個參數 - 其產生的RAW MD5哈希

否則,從東西回來像md5($password)的資料就只有一個字符串散列匹配這個章節exp /[a-z0-9]{32}/i - 哪個不需要需要要逃脫。

這些傢伙解釋爲何以及如何利用原始MD5哈希值:

http://cvk.posterous.com/sql-injection-with-raw-md5-hashes

1
  1. MD5被足夠的密碼安全性 - MD5是一個古老的算法,這是很容易破解;如果你使用MD5來散列密碼,你可能根本不會使用任何東西。目前的最佳實踐建議是使用bcrypt算法。

  2. mysql_real_escape_string()以及其餘的mysql_xxx()函數現在已被棄用。它們被認爲是過時和不安全的,現在還沒有被推薦使用一段時間。即將到來的PHP v5.5將正式棄用它們,但即使您不打算升級到5.5版本,也應該嘗試停止使用它們。有關詳細信息,請參閱Why shouldn't I use mysql_* functions in PHP?

正如我所說的,MD5並不安全,大多數解決方案都是人們自己寫的。哈希密碼的最佳解決方案是使用高質量的庫爲您完成工作。 PHP 5.5將包含一組專門編寫的密碼處理函數,這將使整個事情更容易保持安全。這個庫的一個版本已經被移植到PHP 5.3或5.4中。您可以從這裏下載這個backport版本:https://github.com/ircmaxell/password_compat

在這個時候,這代表了PHP可用的密碼存儲的最佳解決方案。我強烈建議你使用它。