2012-02-22 48 views
1
$pass = substr(md5($_SERVER['REMOTE_ADDR'].microtime().rand(1,100000)),0,6); 
     $insert = mysql_query("INSERT INTO users(username, password) VALUES('".$username."', '".md5($pass)."')"); 

保存來自php表單的密碼。哪一個更安全?

$salt = "zfgse5tfgHk2jdf4hGiuyeV9trejkewQ5kjujPhysftf7agfd"; 
$pass = crypt($password, "$1$".$salt); 
$insert = mysql_query("INSERT INTO users (username, password) VALUES ('".$username."', '".$pass."')"); 

我從一個PHP登記表保存表單數據。以上哪些代碼是安全的?比這更好的東西?

+2

不要直接添加variebles查詢,使用參數 - http://php.net/manual/en/book.pdo.php – 2012-02-22 15:08:45

+0

我個人使用[phpass](http://www.openwall.com/phpass/ )。 – 2012-02-22 15:13:40

回答

2

方法#1將完全破壞一切,您將永遠無法再次登錄。非常安全(除非你不逃避$username,在這種情況下它完全沒有價值),但可能不是你的意圖。

方法#2將起作用;但它看起來有點像一個愚蠢而複雜的做法,應該是直截了當的。

這裏就是我通常使用:

public static function Hash($value) { 
    return hash('sha512', hash('sha512', $value) . Config::HashSalt); 
} 

其中Config::HashSalt是你的長,更隨機鹽字符串。這需要在一個班級。下面是結構的一個例子:https://github.com/minitech/ReTicket/blob/master/config.php

+0

是的!我會試試這個!謝謝! – user830363 2012-02-23 15:49:18

0

第二個選項(第一是完全錯誤的),但略有變化:

  1. 使用SHA512(不要使用MD5)
  2. 使用用戶鹽爲每個用戶不同,但這與一些特殊字符不在鍵盤上
  3. 使用參數變量插入查詢存儲在數據庫
  4. 使用服務器鹽,最好(php.net/manual/en/book.pdo.php
+0

這似乎是一個很好的選擇,使用獨特的用戶鹽和服務器鹽..我也試試這個! – user830363 2012-02-23 15:50:46