記住密碼 功能的正確設計

2022-09-15 07:48:10 字數 2549 閱讀 4857

web上的使用者登入功能應該是最基本的功能了,可是在我看過一些站點的使用者登入功能後,我覺得很有必要寫一篇文章教大家怎麼來做使用者登入功能。下面的文章告訴大家這個功能可能並沒有你所想像的那麼簡單,這是乙個關係到使用者安全的功能,希望大家能從下面的文章中能知道什麼樣的方法才是乙個好的使用者登入功能。

使用者名稱和口令

首先,我們先來說說使用者名稱和口令的事。這並不是本站第一次談論這個事了。如何管理自己的口令讓你知道怎麼管理自己的口令,破解你的口令讓你知道在現代這樣速度的計算速度下,用窮舉法破解你的口令可能會是一件很輕鬆的事。在這裡我想告訴從開發者的角度上來做設計這個使用者名稱和口令的事。下面一幾件規則:

使用者登入狀態

首先,我想告訴大家的是,因為http是無狀態的協議,也就是說,這個協議是無法記錄使用者訪問狀態的,其每次請求都是獨立的無關聯的,一筆是一筆。而我們的**都是設計成多個頁面的,所在頁面跳轉過程中我們需要知道使用者的狀態,尤其是使用者登入的狀態,這樣我們在頁面跳轉後我們才知道是否可以讓使用者有許可權來操作一些功能或是檢視一些資料。

所以,我們每個頁面都需要對使用者的身份進行認證。當然,我們不可能讓使用者在每個頁面上輸入使用者名稱和口令,這會讓使用者覺得我們的**相當的sb。為了實現這一功能,用得最多的技術就是瀏覽器的cookie,我們會把使用者登入的資訊存放在客戶端的cookie裡,這樣,我們每個頁面都從這個cookie裡獲得使用者是否登入的資訊,從而達到記錄狀態,驗證使用者的目的。但是,你真的會用cookie嗎?下面是使用cookie的一些原則。

1)在cookie中,儲存三個東西——使用者名稱登入序列登入token

使用者名稱:明文存放。

登入序列:乙個被md5雜湊過的隨機數,僅當強制使用者輸入口令時更新(如:使用者修改了口令)。

登入token:乙個被md5雜湊過的隨機數,僅乙個登入session內有效,新的登入session會更新它。

2)上述三個東西會存在伺服器上,伺服器的驗證使用者需要驗證客戶端cookie裡的這三個事。

3)這樣的設計會有什麼樣的效果,會有下面的效果,

a)登入token是單例項登入。意思就是乙個使用者只能有乙個登入例項。

b)登入序列是用來做盜用行為檢測的。如果使用者的cookie被盜後,盜用者使用這個cookie訪問**時,我們的系統是以為是合法使用者,然後更新「登入token」,而真正的使用者回來訪問時,系統發現只有「使用者名稱」和「登入序列」相同,但是「登入token」 不對,這樣的話,系統就知道,這個使用者可能出現了被盜用的情況,於是,系統可以清除並更改登入序列登入token,這樣就可以令所有的cookie失效,並要求使用者輸入口令。並給警告使用者系統安全。

4)當然,上述這樣的設計還是會有一些問題,比如:同一使用者的不同裝置登入,甚至在同乙個裝置上使用不同的瀏覽器保登入。乙個裝置會讓另乙個裝置的登入token登入序列失效,從而讓其它裝置和瀏覽器需要重新登入,並會造成cookie被盜用的假象。所以,你在伺服器服還需要考慮-ip 位址

a) 如果以口令方式登入,我們無需更新伺服器的「登入序列」和 「登入token」(但需要更新cookie)。因為我們認為口令只有真正的使用者知道。

b) 如果ip相同,那麼,我們無需更新伺服器的「登入序列」和 「登入token」(但需要更新cookie)。因為我們認為是同一使用者有同一ip(當然,同乙個區域網裡也有同一ip,但我們認為這個區域網是使用者可以控制的。網咖內並不推薦使用這一功能)。

c) 如果 (ip不同&&沒有用口令登入),那麼,「登入token」 就會在多個ip間發生變化(登入token在兩個或多個ip間被來來回回的變換),當在一定時間內達到一定次數後,系統才會真正覺得被盜用的可能性很高,此時系統在後台清除「登入序列」和「登入token「,讓cookie失效,強制使用者輸入口令(或是要求使用者更改口令),以保證多台裝置上的cookie一致。

1)修改口令。

2)修改電子郵件。(電子郵件通常用來找回使用者密碼,最好通發郵件或是發手機簡訊的方式修改,或者乾脆就不讓改一一用電子郵件做帳號名)

3)使用者的隱私資訊。

4)使用者消費功能。

找回口令的功能

找回口令的功能一定要提供。但是很多朋友並不知道怎麼來設計這個功能。我們有很多找回口令的設計,下面我逐個點評一下。

口令探測防守

最後,再說一下,關於使用者登入,使用第三方的 oauth 和 openid 也不失為乙個很不錯的選擇。

記住密碼功能實現

可以用兩種方式實現該功能 1 cookie方式 2 localstorage方式 click me ps 我用cookie時未成功。var user document.getelementbyid user var password document.getelementbyid password ...

winform 記住密碼功能

登入 private void btn login click object sender,eventargs e 提供ini檔案的讀操作 指定的節名 指定的鍵名 ini檔案全路徑 請將string型別轉換為相應int,long的型別 返回值不應超過255字元 public static strin...

記住密碼功能的製作

在登入頁面一般都有乙個叫做記住密碼的功能,它是利用request和cookie技術完成的,下面介紹下如何完成乙個記住密碼的功能開發 類似與記住我這個功能的,入下,在html檔案中寫 注意這個checked,他是用來回顯時,在下次進入登入頁面時,也能顯示是勾選的狀態 2.提供後台的處理,即在後台處理判...