2012-02-24 22 views
2

我正在做某種取消訂閱頁面。使用加密電子郵件地址,用戶名作爲取消訂閱鏈接

我的想法是使用帶加密的get方法。例如:

unsubscribe.php郵件= XXXXXXXXXXXXXXXX &的uid = xxxxxxxxxxxxxxxxxx

一旦他點擊鏈接,能自動unsubscibe接收器。

我將使用SHA1所以這個問題是

1)是否安全的數據進行加密? 2)我是否必須爲加密的uid和郵件地址製作額外的2字段?

謝謝

回答

5

不加密 - 創建一個隨機密鑰,這樣你們在數據庫中存儲和檢索當用戶到達退訂鏈接!更容易和更安全。

email   | random_key 
------------------------------- 
[email protected]  | dsadfdsfsaf2 
[email protected]| dfssf32e34fa 

退訂鏈接:

unsubscribe.php?key=dfssf32e34fa <---- [email protected] 
+0

我應該爲每一個郵件的代碼或只使用一個代碼爲每個郵件發送給他? – user782104 2012-02-24 17:56:22

+0

如果我在不同的郵件策略中使用同一個接收器的不同代碼,它會變得越來越複雜... – user782104 2012-02-24 17:57:09

+0

@user總是生成一個新的代碼。使用後將其刪除。我 – 2012-02-24 17:57:17

4

Absolultely不!

請勿像這樣加密用戶的數據。你什麼都不做,只是不必要地向公衆公開用戶數據。

除了hashing is not encryption ...

相反,創建一個長隨機數序列(至少40個字符),並將其存儲在數據庫中的用戶。然後將其添加到郵件取消訂閱鏈接。這樣一來,沒有數據泄露的機會......

生成隨機字符串,可以使用類似這樣的功能:

function makeRandomString($bytes) { 
    $seed = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $len = strlen($seed) - 1; 
    $return = ''; 
    for ($i = 0; $i < $bytes; $i++) { 
     $return .= $seed[mt_rand(0, $len)]; 
    } 
    return $return; 
} 

$random = makeRandomString(40); // 40 character random string... 
+0

php函數rand(min,max)可以使用嗎? – user782104 2012-02-24 18:00:55

+0

對不起,我發現它只生成一個隨機數 – user782104 2012-02-24 18:02:23

+0

,我應該處理代碼,如果有碰撞.....(生成的代碼已存在) – user782104 2012-02-24 18:03:16

相關問題