2010-10-23 223 views
0

我必須創建一個登錄模塊(問題不是語言特定的),但我不知道如何驗證用戶。我在哪裏以及如何存儲密碼。我將不得不加密和解密我的密碼,如果是的話,建議最好的方法是什麼?總的來說,我需要知道我需要開發哪些用戶可以安全登錄以訪問我的網站的登錄模塊。如何創建一個登錄模塊

回答

3

您不需要解密您的密碼以驗證它們,只需一種加密方式就可以正常工作。這個想法是,當用戶輸入密碼時,你可以用相同的方法(使用相同的算法和「salt」)對它進行加密,然後與存儲在數據庫中的加密密碼進行比較。如果它們相等,很有可能意味着它是相同的原始密碼。因此,您可以防止任何人 - 管理員或任何攻擊者 - 知道用戶在您的網站上使用的原始密碼。至於其餘部分,它非常簡單,你的數據庫中有一張表,其中包含用戶登錄,加密密碼以及可能的一些配置文件信息(全名等)。

我通常用下面的函數來散列用戶密碼:

$password_hash = sha1(MY_SALT_1 . $login_name . MY_SALT_2 . 
    $password . MY_SALT_3); 

其中MY_SALT_ *是任意的預定義的字符串,可以是例如'黑暗','側面','月亮'(或者實際上越不相關 - 越好)。

+0

對此感到遺憾,但讓我們說用戶輸入的密碼錶單提交後,我從請求params收到密碼。現在按照你我應該加密他們,並與db中的密碼進行比較吧?還是不止於此。 – 2010-10-23 10:10:06

+0

首先你需要輸入登錄名並在數據庫中查找。一旦找到了所需的行,請確保用戶輸入了正確的密碼。這是您從表單中獲取密碼的地方,將其散列並與存儲在數據庫中的密碼進行比較。如果它們是真實的,則意味着用戶輸入的密碼與他/她在您的網站上註冊時相同。很明顯,當用戶首先在你的網站上註冊時,你需要以同樣的方式對他/她的密碼進行哈希處理。 – mojuba 2010-10-23 10:14:23

+0

因此,當用戶嘗試登錄其未加密的密碼時,密碼從瀏覽器傳輸到服務器是安全的。請不要介意它是否聽起來很愚蠢。 – 2010-10-23 10:39:12

0

是的。你需要加密用戶的密碼。因爲大多數用戶使用相同的密碼幾乎所有的網站。當時他們不想顯示密碼給管理員。另一個原因是大多數時間站點數據庫不僅可以由管理員訪問,還可以在組織中訪問其他技術人員。因此,最好對密碼進行加密。SHA1是進行加密的最佳方式。
Where and how will i store the passwords.
我不確定這是什麼意思。每個人都使用它的數據庫,如phpmyadmin。