2012-08-11 55 views
0

使用ASP.NET MVC,實體框架,jQuery。我想給用戶,如果他們點擊了「記住我」自動登錄的能力,這種方法我想出是:自動將用戶登錄到您的網站後面的系統

    • 哈希PW用戶登錄,並存儲在DB 如果當用戶登錄&,他們勾選'記住我'
    • 創建一個cookie,使用加密的用戶ID,然後是某種分隔符和散列PW。

然後用戶回來接下來的時間,我可以檢查他們的Cookie,如果它存在我記錄他們與AJAX。如果用戶註銷,我當然會刪除他們的cookie。

這是完成自動登錄功能的正確方法嗎?

我想我的哈希函數和用戶ID加密函數將服務器端,並創建cookie我會通過AJAX調用該函數,然後創建它。

這是最佳實踐嗎?

三江源

回答

3

你的方法(具有與指示用戶已登錄的值的cookie中)是相當標準的。

什麼是標準存儲散列的用戶名和密碼(尤其是密碼) - 不知道你爲什麼會需要,自餅乾是以明文形式傳輸(HTTP連接),你給之間的人您的網站和用戶能夠看到密碼散列並有機會打破密碼以獲取密碼。

取而代之的是密碼哈希,創造出獨特的「的loggedIn」令牌(比如一個GUID),您在Cookie存儲 - 這是你比較什麼,以確定用戶是否登錄

+0

好吧,我想看看你在說什麼。所以我創建一個GUID並將用戶存儲在客戶端Cookie中。當他/她登錄(自動)我匹配數據庫,如果我的SQL表中有一行,例如user_auth_guds,其中的GUID鍵匹配,我登錄用戶?如果他們註銷,我只是刪除他們的客戶端cookie? – Baconbeastnz 2012-08-11 08:28:13

+0

@Baconbeastnz - 聽起來很正確。這是關於暴露敏感信息。當用戶註銷/忘記密碼時,我還會清除數據庫中的標記值,因此如果被捕獲,則不能重新使用它。 – Oded 2012-08-11 08:30:04

+0

謝謝你,先生,謝謝你,讚美你的家人:) – Baconbeastnz 2012-08-11 10:37:43

1

許多可能的方法之一可能是:

注:我已經在Pure PHP中進行了編碼。但是所有語言的邏輯都是一樣的。

  1. set $ redirect = FALSE。
  2. $ _GET [「logout」]是否設置?如果是,則轉到3,否則轉到5
  3. 如果設置,刪除,授權,rem_me cookies,銷燬會話。
  4. 顯示登錄表單並退出。
  5. 這是一條供應信息嗎?如果是,則轉到6,否則轉到18
  6. 設置$ redirect = TRUE。
  7. 是用戶名&密碼嗎?如果是,則轉到8,否則轉到3
  8. 獲取$ username,$ pass-hash & $ db中的rem-me-hash。
  9. 是$ username & $密碼與DB中相同嗎?如果是,則轉到10,否則轉到步驟3
  10. 設置cookie [「username」] =已清理($ _ POST [「username」])
  11. 發出一個包含$ auth = sha1的cookie [「auth」] .password.time.6random_letters)。
  12. 設置會話[「auth」] = sha1($ auth)。取消設置$ auth。
  13. 是否記得我選擇的選項?如果是,進入13,否則轉到15
  14. 設置$ REM = SHA1
  15. 設置cookie的[ 「REM」] = $ REM
  16. ($隨機$ user_string。$時間$密碼。$的用戶名。)
  17. Set $ rem = 0
  18. 如果$ rem!= $ rem-me-hash_DB,請在數據庫中插入$ rem。轉到23
  19. 是否設置了$ rem cookie?是去19,否則去20
  20. 是$ rem cookie == $ rem-hash-in-db?如果是,轉到22,否則轉到3
  21. 是$ username-cookie & & $ auth-cookie & & auth-SESSION set?如果是,則轉到21,否則轉到3
  22. 是sha1($ auth-cookie)=== $ _SESSION [「auth」]?如果是,則轉到22,否則轉到3
  23. 是$ redirect == TRUE?如果是,則使用301,GET方法重定向到同一頁面。否則去23
  24. 這是我的超級祕密星際迷航壁紙(內容)。

一個漫長的過程,但(希望)涵蓋所有情況。

將所有此算法保存在password.php中,並且在要保護的每個文件的頂部包含此文件。對祕密內容的控制只有在經歷了所有可能的情況後纔會出現。在每一次故障中,腳本都將顯示登錄表格&退出。

而且它實現了郵政重定向消息獲取(Wikipedia)的方式,你在哪裏得到一個POST請求,處理它,並用GET方法將用戶重定向回,以防止返回&雙表單提交刷新按鈕按下..

上述說明中可能存在拼寫錯誤或混合概念。讓我知道任何改進。