2011-07-27 54 views
0

所以現在當用戶註冊時,他們的密碼被散列並存儲,他們的id被存儲爲主鍵,並且默認情況下,email_activation字段中的單元被枚舉爲'no'。然後他們會發送一封電子郵件,通過點擊下面的鏈接可以激活他們的賬戶。

http://website.com/activation.php?id=1&pass=23a000e03e9116c958dh923542

點擊該鏈接後,下面的腳本運行

$id= $_GET['id']; 
$hashPass= $_GET['pass']; 

mysql_query("UPDATE members SET email_activation='yes' WHERE members_id='$id' AND members_password='$hashPass'") 

這個問題似乎像一個安全的方式來激活某個用戶的帳戶考慮其散列通是URL的一部分(假設的適當的衛生設施字符串等...)?

回答

2

有沒有必要把密碼,哈希或不,在鏈接(和不,你不應該這樣做)。

Store中不同隨機值除了密碼在你的數據庫,然後把這個隨機值中的鏈接。 (請參閱:http://en.wikipedia.org/wiki/Cryptographic_nonce

由於隨機激活值只能使用一次(並且不能授予對該帳戶的正常訪問權限),所以將其放入URL中可以。

+0

感謝琥珀,我喜歡將激活基於註冊帳戶時分配的隨機值的想法。 – user784637

+0

其實,你可以推薦一個函數在PHP中生成隨機長度的隨機字母數字字符串? – user784637

+0

你可以根據'rand()'或'mt_rand()'自己寫一個。 – Amber

3

否。使用單獨的字段來包含激活散列,並將散列基於多個事物(用戶名,密碼散列,一天中的時間等)。

+0

感謝您的及時回覆,我會盡快回復。所以通常可以在URL中包含激活散列? – user784637

+2

只要激活碼不能被多次使用以訪問帳戶,就沒關係。 (最好的系統甚至不會直接給你訪問;他們仍然要求你在激活後登錄。) – Amber

0

這樣做不是很安全,沒有。改爲分配一個唯一的隨機密鑰會更好。

0

我想在表中創建另一個字段只是爲了激活。這樣你就不會在URL中擁有密碼哈希。

(我的回覆不夠快)

相關問題