用戶登錄是系統(tǒng)中最重要的功能之一,登錄成功就能擁有系統(tǒng)的相關(guān)使用權(quán)限。所以設(shè)計一個安全的登錄流程是十分必要的。保護用戶賬號不被黑客竊取,既是在保護用戶的基本利益,更是在保護網(wǎng)站的信譽和業(yè)務(wù)發(fā)展。
流程安全性
安全的登錄流程必須使用 HTTPS 協(xié)議。HTTPS 協(xié)議具有較高的安全性,可以保證數(shù)據(jù)傳輸過程的安全。雖然有 fiddler 等代理方式可以截取數(shù)據(jù),但一般情況下沒有用戶的配合也無法截取。HTTPS 證書可以在阿里云申請,個人站點可以直接用免費版,非常方便。nginx 和 Spring Boot 的配置也非常簡單。
登錄一定要有人機驗證機制,可以防止黑客以暴力破解的方式嘗試登錄。通常可以用圖片驗證碼,并且圖片要加干擾線,使用不同的字體、大小寫提高識別難度。目前有打碼平臺和 AI 方式可以識別圖片驗證碼,但是成本比較高。一些大型網(wǎng)站已經(jīng)在使用新的驗證方式,比如拖動鼠標(biāo)移動滑塊或者把一個傾斜的圖片扶正,攻擊的難度還是比較高的。
一定要注意防范 XSS、CSRF 攻擊。攻擊者通過在目標(biāo)網(wǎng)站上注入惡意腳本,可以在其他用戶的瀏覽器上運行腳本。利用這些惡意腳本,攻擊者可獲取用戶的敏感信息。用戶提交的任何數(shù)據(jù)都要保持懷疑態(tài)度,不能完全信任,該過濾就過濾,該攔截就攔截。國內(nèi)大型網(wǎng)站,比如淘寶也存在過 CSRF 漏洞,可見大家對這種攻擊形式還比較陌生。
后臺登錄代碼要注意防范 SQL 注入攻擊。如果黑客提交 password or 1 = 1 而后臺沒做 SQL 防注入,只是查詢下數(shù)據(jù)是否存在,有可能就攻擊成功了。所以 or 1 = 1 有個響亮的名字,叫萬能密碼。恐怕大家在做大學(xué)作業(yè)的時候,都有這個漏洞吧。
登錄成功后,返回的 cookie 要設(shè)置 httponly、secure,這樣就無法通過 js 腳本獲取 cookie,可以防止跨站攻擊,增加爬蟲程序的難度。cookie 有效期根據(jù)業(yè)務(wù)需求決定,盡量短一些。曾經(jīng)我也做過爬蟲,爬網(wǎng)銀的時候就處理過很多這樣的 cookie,比普通 cookie 復(fù)雜很多。
如果使用手機短信登錄,一定要控制驗證碼的時效性,即驗證碼一次有效 5 分鐘,一分鐘內(nèi)只能發(fā)送一次。有必要時可以單點登錄,其他設(shè)備登錄后,本設(shè)備自動失效。也可以使用第三方授權(quán)登錄接口,如微信登錄等,優(yōu)化用戶登錄體驗,安全性更好。
密碼安全性
盡量提升密碼強度。一般來說,長度要 8 位以上,必須同時包含數(shù)字、小寫字母、大寫字母,建議用戶使用特殊字符。
重置密碼,最好通過郵箱發(fā)送一定時間內(nèi)有效的重置鏈接,或者手機短信驗證碼,甚至兩者相結(jié)合的方法。安全要求特別高的場景,比如股票交易軟件,有的設(shè)計了一個單獨的動態(tài)密碼 APP,通過算法比對動態(tài)密碼。密碼保護問題在今天隱私滿天飛的時代背景下,可能已經(jīng)不那么安全了。
用戶名密碼錯誤提示含糊一些。無論是用戶名還是密碼錯誤,統(tǒng)一提示“用戶名或密碼錯誤”,不要給用戶明確的提示。這樣會在一定程度上讓忘記用戶名的用戶難以登錄,可以輔助一個用戶名找回機制或允許使用郵箱、手機號進行登錄。
不要在瀏覽器中明文保存用戶名、密碼,md5 加密也不行。如果要自動登錄,可以保存 RSA 加密后的密文,通過 cookie 提交密文進行解析來自動登錄。md5 或者 md5(md5) 在今天已經(jīng)不安全了,黑客的彩虹表可能已經(jīng)覆蓋了大多數(shù)數(shù)據(jù)了。
保護好用戶
密碼落庫必須加密。CSDN當(dāng)年使用明文存儲密碼導(dǎo)致被脫褲后完全公開了用戶密碼,給用戶和網(wǎng)站帶來了極大的風(fēng)險。基于彩虹表能夠很方便地破解 md5、sha1 等古老算法的密文,建議至少使用 sha256 及以后的算法,并且加密過程加鹽。鹽的長度最好也要在 64 位以上。如果條件允許,給每個用戶設(shè)計一個獨有的鹽值,將極大提升安全性。
數(shù)據(jù)庫要保留用戶的歷史密碼,修改密碼時,不能和前幾次一樣。如果黑客掌握了某個歷史密碼,也可能在用戶改回后恰好就對上了。參考 Google 賬號登錄,修改密碼和 6 個月前的一樣都是不行的。
保留用戶的登錄記錄。時間、ip 都需要。如果本次 ip 和以前的有較大的差別,可以通過郵箱、短信、站內(nèi)信等向用戶提示,建議用戶修改密碼。用戶長時間沒有登錄,后續(xù)再登錄的時候最好強制修改密碼,并且和歷史密碼不重復(fù)。
短時間內(nèi)登錄失敗,要鎖定用戶。比如失敗 5 次可以鎖定 1 小時,再次失敗鎖定 8 小時,又失敗鎖定 24 小時。鎖定后,用戶可以通過注冊郵箱或手機短信實現(xiàn)解鎖,但一天內(nèi)也要限制解鎖次數(shù)。
即使在用戶登錄后,進行重要操作的時候,也要求用戶重新輸入一次密碼。比如修改密碼、修改綁定郵箱、修改密碼保護問題、有消費行為等,可以防止用戶被 XSS 攻擊后黑客修改重要數(shù)據(jù)。
總結(jié)
本文梳理了設(shè)計登錄流程需要考慮的一些關(guān)鍵點。世界上沒有絕對安全的系統(tǒng),有價值的網(wǎng)站和應(yīng)用都是黑客攻擊的重點對象。工作中務(wù)必重視安全問題,發(fā)現(xiàn)漏洞及時修復(fù)。也要考慮網(wǎng)站數(shù)據(jù)的重要程度,采取合適的防護措施。
責(zé)編AJX
-
網(wǎng)絡(luò)安全
+關(guān)注
關(guān)注
11文章
3199瀏覽量
60265 -
SQL
+關(guān)注
關(guān)注
1文章
775瀏覽量
44272 -
黑客
+關(guān)注
關(guān)注
3文章
284瀏覽量
21935
發(fā)布評論請先 登錄
相關(guān)推薦
如何保證汽車遠程信息系統(tǒng)的安全性
nios如何保證安全性的
邊緣智能的邊緣節(jié)點安全性
藍牙m(xù)esh系列的網(wǎng)絡(luò)安全性
物聯(lián)網(wǎng)應(yīng)用中BLE安全性怎么保證?
嵌入式實時多任務(wù)操作系統(tǒng)的安全性怎么樣?
嵌入式設(shè)備如何提高安全性
HarmonyOS學(xué)習(xí)之三:HarmonyOS 系統(tǒng)安全性
你的應(yīng)用程序如何保持安全性?
RISC-V如何保證高權(quán)限模式程序及外設(shè)的安全性?
如何保證Polkadot網(wǎng)絡(luò)的安全性
![如何<b class='flag-5'>保證</b>Polkadot<b class='flag-5'>網(wǎng)絡(luò)</b>的<b class='flag-5'>安全性</b>](https://file.elecfans.com/web1/M00/A2/3E/o4YBAF1M62-AIJq_AAHa2NOC1Yg946.png)
評論