被黑客攻擊了,登入流程要怎麼做才安全

程式之心發表於2020-11-16

作者:丁儀

來源:https://chengxuzhixin.com/blog/post/deng_lu_liu_cheng_zen_me_zuo_cai_an_quan.html

 

使用者登入是系統中最重要的功能之一,登入成功就能擁有系統的相關使用許可權。所以設計一個安全的登入流程是十分必要的。保護使用者賬號不被黑客竊取,既是在保護使用者的基本利益,更是在保護網站的信譽和業務發展。

 

流程安全性

安全的登入流程必須使用 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 攻擊後黑客修改重要資料。

 

總結

本文梳理了設計登入流程需要考慮的一些關鍵點。世界上沒有絕對安全的系統,有價值的網站和應用都是黑客攻擊的重點物件。工作中務必重視安全問題,發現漏洞及時修復。也要考慮網站資料的重要程度,採取合適的防護措施。

微.信.搜.一.搜程式之心,每週一三五原創更新。

相關文章