記住密碼”功能的正確設計
這個功能簡直就是一個安全隱患,我覺得並不是所有的程式設計師都知道怎麼設計這個事。一般的設計
是——一時使用者勾選了這個功能,系統會生成一個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上的使用者登入功能嗎)
相關文章
- C# 實現記住密碼功能C#密碼
- Android-實現記住賬號密碼功能Android密碼
- SharedPreferences實現記住密碼----自動登入功能密碼
- 直播軟體app開發,vue記住密碼功能APPVue密碼
- 找回密碼的功能設計密碼
- 程式設計師正確看程式碼的方式程式設計師
- SSH 遠端登入「記住密碼」密碼
- Harbor正確密碼登入不上去密碼
- 加鹽hash儲存密碼的正確方式密碼
- css瀏覽器記住密碼修稿預設樣式CSS瀏覽器密碼
- macbook開機登入時輸入正確的密碼卻提示密碼錯誤Mac密碼
- 直播app原始碼,登入時自動輸入密碼/自動記住密碼APP原始碼密碼
- ubuntu密碼正確,卻不能登入圖形介面Ubuntu密碼
- 通過jquery.cookie.js實現記住使用者名稱、密碼登入功能jQueryCookieJS密碼
- 如何正確的開始用 Go 程式設計Go程式設計
- 程式設計師計算私活薪資的正確方式程式設計師
- jQuery記住使用者名稱和密碼效果程式碼例項jQuery密碼
- 直播系統原始碼,自動登入及記住密碼實現原始碼密碼
- 提出問題,解答問題!這才是理解程式碼設計的正確方法
- 密碼學課程設計 - 混合密碼的實現密碼學
- linux儲存住github的賬號和密碼LinuxGithub密碼
- Go併發程式設計--正確使用goroutineGo程式設計
- 前端設計,確定按鈕正慢慢消失前端
- SpringSecurity(2)---記住我功能實現SpringGse
- 直播app系統原始碼,使用者登入後選擇記住密碼,下次自動填充密碼APP原始碼密碼
- UI設計培訓分享:ui的字型怎麼正確設定?UI
- 反應式程式設計是正確的方法嗎? - JAXenter程式設計
- 反對函數語言程式設計的政治正確函數程式設計
- 程式設計師玩連連看的正確姿勢程式設計師
- 怎樣修改chrome記住密碼後自動填充表單的黃色背景?Chrome密碼
- vue中使用cookies和crypto-js實現記住密碼和加密VueCookieJS密碼加密
- 好程式設計師前端教程-MVC框架的正確構建程式設計師前端MVC框架
- 設計表時,如何選擇正確的資料型別資料型別
- 這才是開啟風變程式設計的正確操作方式程式設計
- 實驗設計(DOE)的正確使用方法,拿走不謝!
- WinForm應用程式的開機自啟、記住密碼,自動登入的實現ORM密碼
- 【UX設計】如何為你的遊戲選擇正確的字型?UX遊戲
- 密碼正規表示式密碼
- 原始碼|使用FutureTask的正確姿勢原始碼