如何設計一個安全的登入流程
登入是系統中最重要的一個功能之一,登入成功就能擁有系統的使用權利,所以設計一個安全的登入流程是十分必要的,那在一般登入中需要考慮哪些重要因素呢?我們一一列表一下。
使用https協議進行傳輸,雖然麻煩,但是很強的保護措施。
強制使用者使用有一定強度且複雜的密碼,必須要有大小寫加數字,長度在8位以上,杜絕像123456之類的弱密碼。
密碼不要明文儲存到資料庫,CSDN當年使用明文儲存密碼導致使用者密碼被完全暴露,這個事件影響十分嚴重。所以造成不要使用明文儲存密碼,要使用像MD5之類的雜湊演算法加密儲存,加密之前密碼同時還要加上一個不固定的salt值一起拼接加密,一般md5(md5(password) + salt)就可以了,這個salt是鹽,一起加密增加密碼的長度也增加了破解的難度,鹽一般設計為64位隨機生成的字串,最好分開存放,假如使用者資訊庫被攻擊了黑客也拿不到鹽的庫。不能使用可逆的演算法,如果可逆,那如何儲存金鑰是個非常棘手的問題,一般使用明文加密與資料庫中的密文對比就能確定密碼正確與否,我們不需要知道使用者的明文是什麼,如果使用者忘了可以通過重置或者密碼保護問題修改密碼,這也比總明文儲存要好一萬倍。
MD5現在已經不是十分安全了,最好使sha256,sha512之類安全強度更高的雜湊加密演算法。
使用者名稱密碼錯誤不要單方面提示,如果密碼錯誤提示使用者說密碼錯誤這樣攻擊者就知道使用者名稱是對的,下次攻擊密碼,所以不管是使用者名稱還是密碼錯誤都給出同樣的提示:使用者名稱或密碼錯誤,或者別的不具體的提示的錯誤都可以。
前端禁止使用者輸入導致sql注入的字元,後臺也要做sql注入的防護。
儲存歷史密碼,一段時間沒登入的使用者再次登入時提示要修改密碼才能登入,這時新密碼不能和歷史密碼一樣,蘋果就是這麼做的。
儲存每次的登入資訊日誌,如果登入的IP與以往有很大差別,要引導使用者重置密碼方可登入。
不要在cookie中保留使用者密碼,如果一定要使用cookie實現自動登入,切記不要使用簡單的使用者名稱+密碼MD5儲存到cookie,要把使用者ID、使用者名稱、過期時間、IP、不固定的salt等一起考慮進去,這個當然要可逆,服務端要進行解密才能難是否使用者自動登入有效。另外,cookie要設定為http only,這樣就不能通過指令碼訪問cookie,保證cookie的安全性。
不要讓瀏覽器記住密碼,雖然記住密碼很方便,但也不安全,所以前端最好做控制。
一段時間類的嘗試登入失敗次數達到某個值,要鎖定使用者登入,如失敗5次鎖定24小時。或者間隔性鎖定,如失敗3次後鎖定半小時,再失敗1次鎖定1小時,再失敗1次鎖定24小時。
設定會話有效期,比如登入後10分鐘不操作就失效,要重新登入。
驗證碼使用,加上干擾線,防止計算機能夠輕易識別,這樣也可以防止黑客以程式的方式來嘗試登入。
手機登入的一般使用簡訊驗證碼的,控制驗證碼的時效性,即驗證碼一次有效,一分鐘內只能傳送一次。
有必要的要採用單點登陸,如果允許使用者多處登入的要給使用者安全提醒。
重置密碼最好通過郵箱傳送一定時間內生效的重置連結,或者手機簡訊驗證碼,或者兩者相結合的方法。像一般的大公司都有設計一個動態密碼的東西,手機即一切,所以也要妥善保管自己的動態加密的APP,最好加上指紋或手勢。
設定使用者可以登入的IP,即IP白名單。像比如財務系統,限制財務人員只能在辦公室登入系統。
先總結到這,沒有真正安全的登入機制,正所謂道高一尺魔高一丈,我們要做到與時俱進。
相關文章
- camunda快速入門(四):如何設計一個帶條件分支的流程
- 粗淺設計一個登入平臺
- 如何設計一個優秀的移動支付流程?
- 如何設計APP登入模組?APP
- 登入介面設計之一:總體
- 如何藉助前端表格控制元件設計一個流程圖前端控制元件流程圖
- 請教設計一個流程多變的模式模式
- 如何設計並實現一個執行緒安全的 Map ?(下篇)執行緒
- 如何設計並實現一個執行緒安全的 Map ?(上篇)執行緒
- 自動登入的設計思路
- 如何設計一個良好的API?API
- 用go設計開發一個自己的輕量級登入庫/框架吧Go框架
- 流程圖之美:手把手教你設計一個流程圖流程圖
- 如何用CSS3製作一個漂亮的登入框CSSS3
- 設定不允許一個USER在多個GUI上登入GUI
- 如何設計一個良好的API介面?API
- 如何設計一個優秀的APIAPI
- 如何搭建一個智慧客服(一):從NLP到多輪對話與多流程設計
- 用go設計開發一個自己的輕量級登入庫/框架吧(業務篇)Go框架
- MySQL安全登入策略MySql
- 如何設計一個牛逼的API介面API
- 如何設計一個“高大上”的 logoGo
- 如何做出一個好的設計方案
- 短影片app開發,可以借鑑的幾個登入介面設計APP
- 解決單點登入的一個方法!
- linux vnc登入不了的一個原因LinuxVNC
- Question | 一鍵登入是如何實現的?
- win10如何設定自動登入 win10設定自動登入的方法Win10
- 如何尊重一個程式設計師程式設計師
- 如何自己實現一個健壯的 SSO 單點登入系統
- Flutter關於一個登入頁Flutter
- 智慧城市:如何設計的更安全?
- 如何開啟帝國cms安全設定?登入帝國cms管理後臺
- Oracle中如何保證使用者只有一個Session登入OracleSession
- win10 自動登入如何設定_windows10自動登入的設定步驟Win10Windows
- 如何構建一個高效的開發流程
- 一組手機APP登入頁設計,讓你的靈感爆棚APP
- 如何設計一個更通用的查詢介面