2013-01-02 67 views
0

目前我寫了一封電子郵件驗證碼,發送一個鏈接,其中包含用戶的GUID作爲驗證碼。我不認爲這是安全的,所以我想聽聽你的建議,創建驗證碼的最好和最簡單的方法是什麼?創建電子郵件驗證鏈接的最佳做法?

我認爲最簡單最容易的方法是創建某種散列並將其放入數據庫中,當用戶單擊鏈接時,它會將鏈接值與我的數據庫中的散列進行比較。但爲什麼我需要我的數據庫中只有一次使用一列?這是浪費空間。

+0

您爲什麼認爲用戶的GUID不是安全的方法?它應該接近真正的隨機和不可猜測的... –

+0

說實話,我不知道爲什麼GUID在驗證鏈接是一個不好的做法,但我覺得在我內心,我不應該這樣使用它。 ;-) – ojek

+1

@Jon - 我不同意。以明文形式擁有用戶的GUID將是一種公平的安全風險,絕對不是最佳做法。打開用戶模擬等的可能性。 – CAbbott

回答

2

我會說你可以對用戶的GUID(可能用一個SALT)做簡單的symmetric encryption,然後簡單地解密用戶的GUID作爲驗證。

+0

是的。在創建這個線程之前,我正在尋找這種方法,並且看起來我需要什麼。但我並不完全理解整個加密的事情。問題是,爲了加密你需要一個「密碼」的東西。我在哪裏保存密碼?我應該硬編碼嗎? – ojek

+0

有幾個地方可以保存對稱密鑰:數據庫,web.config甚至代碼。通常它可以保存在你的web.config中。 – CAbbott

+1

在數據庫中存儲Salt以及Web.config中的密鑰是一個非常好的解決方案,因爲有人必須使用web.config和數據庫值來計算重置代碼。 –

3

通常情況下,您會創建一個隨機值(Guid適用於此),它是一個重置密碼代碼。該代碼應該過期,應該只能使用一次。您不希望有人閱讀某個包含密碼重置並且能夠重置代碼的舊郵件(因爲使用UserID Guid的代碼總是相同的)。

看看The definitive guide to forms based website authentication在SO上,它有很多有用的信息。

+0

哦,那個鏈接太棒了!現在看看它,很多有用的信息。謝謝! – ojek

相關問題