記住密碼”功能的正確設計
這個功能簡直就是一個安全隱患,我覺得並不是所有的程式設計師都知道怎麼設計這個事。一般的設計
是——一時使用者勾選了這個功能,系統會生成一個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一致。
我覺得這是一種不錯的方案,cookies被盜的假象甚至可以“弄巧成拙”地實現——QQ的後來登入使用者擠掉之前的登入使用者這樣的功能。
本文轉載自:http://coolshell.cn/articles/5353.html(你會做Web上的使用者登入功能嗎)
相關文章
- cookie記住密碼功能Cookie密碼
- C# 實現記住密碼功能C#密碼
- 直播軟體app開發,vue記住密碼功能APPVue密碼
- Android-實現記住賬號密碼功能Android密碼
- 找回密碼的功能設計密碼
- SharedPreferences實現記住密碼----自動登入功能密碼
- 設定讓TortoiseGit記住賬號和密碼Git密碼
- 程式設計師正確看程式碼的方式程式設計師
- SSH 遠端登入「記住密碼」密碼
- Harbor正確密碼登入不上去密碼
- 加鹽hash儲存密碼的正確方式密碼
- vue專案實現記住密碼到cookie功能(附原始碼)!這只是demoVue密碼Cookie原始碼
- css瀏覽器記住密碼修稿預設樣式CSS瀏覽器密碼
- 設定PL/SQL Developer記住使用者名稱密碼SQLDeveloper密碼
- php使用cookie完成登入記住密碼PHPCookie密碼
- 加鹽密碼雜湊:如何正確使用密碼
- mac securecrt無法記住密碼的解決方法MacSecurecrt密碼
- 教你一招,如何設定一個容易記住又安全的密碼密碼
- 通過jquery.cookie.js實現記住使用者名稱和密碼的功能jQueryCookieJS密碼
- Oracle中修改sysman和dbsnmp密碼正確流程Oracle密碼
- macbook開機登入時輸入正確的密碼卻提示密碼錯誤Mac密碼
- 直播app原始碼,登入時自動輸入密碼/自動記住密碼APP原始碼密碼
- ubuntu密碼正確,卻不能登入圖形介面Ubuntu密碼
- 通過jquery.cookie.js實現記住使用者名稱、密碼登入功能jQueryCookieJS密碼
- 表單使用者名稱和密碼記住效果密碼
- Linux下root密碼正確卻登陸失敗Linux密碼
- 如何正確的開始用 Go 程式設計Go程式設計
- 如何培養正確的原型設計思維?原型
- 如果在共享登入對話方塊上讓windows記住了密碼,把記住的密碼刪除Windows密碼
- 程式設計師計算私活薪資的正確方式程式設計師
- 直播系統原始碼,自動登入及記住密碼實現原始碼密碼
- jQuery記住使用者名稱和密碼效果程式碼例項jQuery密碼
- 通過jquery實現記住使用者名稱密碼jQuery密碼
- EBS 11i 輸入正確密碼後無反應密碼
- 老程式設計師應該記住的 5 件事程式設計師
- 提出問題,解答問題!這才是理解程式碼設計的正確方法
- JavaScript 設計模式 :正確使用物件導向程式設計的姿勢JavaScript設計模式物件程式設計
- 老闆該如何正確的犒賞程式設計師程式設計師