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