2012-02-13 58 views
0

我正在編碼通過電子郵件發送的鏈接,以便用戶重置其密碼。我想要這個鏈接保持兩個參數「發送日期」和「用戶ID」。因此,它可能看起來像向用戶發送密碼重置鏈接

www.resetpassword.aspx?senddate="..."&userid="..." 

我想這些參數應該被加密,哪些我想知道的是,是否有必要通過一些複雜的雙向加密算法,我也可以在ASCII字符串只是轉換爲十六進制代碼。

我應該讓用戶看到鏈接中有發送日期和用戶ID嗎?有沒有通用的標準來做到這一點?

+5

**使用ASP.Net Forms Auth **。不要重新發明輪子。加密和安全是_hard_,看起來你還沒有準備好。 – SLaks 2012-02-13 17:57:43

+0

你可以說Crypto和Security是一個PITA。 ;) – McKay 2012-02-13 17:58:49

+1

那麼,我是一個新手程序員-_-# – pita 2012-02-13 18:21:09

回答

3

我不會加密它。當用戶啓動密碼重置時,將隨機令牌放入其用戶詳細信息中(如果您有數據庫,則是)。根據該令牌進行驗證。密碼成功重置後,從數據庫中刪除該令牌。

+0

+1這與確切的時間戳結合應該是足夠的,看起來。兩者都可以在鏈接中傳遞。 – 2012-02-13 17:59:11

4

您需要包含密鑰哈希以防止攻擊者替換其他用戶ID。

1

不要在查詢字符串中顯示UserId。

您可以在數據庫中記錄密碼重置。創建一個散列並將其分配給UserId,SendDate,ExpiryDate,以及其他你需要的東西。

而是在查詢字符串上發送散列,並在收到請求時,查找與其關聯的詳細信息。