如何設計乙個安全的登入流程

2021-09-20 08:00:44 字數 1357 閱讀 7909

登入是系統中最重要的乙個功能之一,登入成功就能擁有系統的使用權利,所以設計乙個安全的登入流程是十分必要的,那在一般登入中需要考慮哪些重要因素呢?我們一一列表一下。

使用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分鐘不操作就失效,要重新登入。

驗證碼使用,加上干擾線,防止計算機能夠輕易識別,這樣也可以防止黑客以程式的方式來嘗試登入。

手機登入的一般使用簡訊驗證碼的,控制驗證碼的時效性,即驗證碼一次有效,一分鐘內只能傳送一次。

有必要的要採用單點登陸,如果允許使用者多處登入的要給使用者安全提醒。

設定使用者可以登入的ip,即ip白名單。像比如財務系統,限制財務人員只能在辦公室登入系統。

先總結到這,沒有真正安全的登入機制,正所謂道高一尺魔高一丈,我們要做到與時俱進。

關於安全登入流程的設計

用到的名詞解釋 ouid 為生成s2存在,md5 uid s0 pwd 就是使用者的密碼 s1 md5 s0 s2 md5 s1,ouid db中儲存的密碼 tg1 客戶端生成的動態秘鑰 客戶端自定義?tg2 客戶端首次提交給伺服器含有tg1的串,tg2 tea s2,tg3 服務端根據 passw...

如何設計乙個單點登入系統(2)?

如何設計乙個單點登入系統 1 中,我著重從單點登入系統的由來,單點登入的概念,乙個好的單點登入系統應該具備的特點以及本人親自實現的乙個單點登入系統幾方面做了些介紹,這篇文章主要介紹下具體實現方案。1.1 傳統sso實現方案 登入 1.2 傳統sso實現方案 登出 圖1.1為傳統sso實現方案中登入流...

如何設計乙個安全的API介面詳解

目錄 在日常開發中,總會接觸到各種介面。前後端資料傳輸介面,第三方業務平台介面。乙個平台的前後端資料傳輸介面一般都會在內網環境下通訊,而且會使用安全框架,所以安全性可以得到很好的保護。這篇文章重點討論一下提供給第三方平台的業務介面應當如何設計?我們應該考慮哪些問題?主要從以上三個方面來設計乙個安全的...