密码安全解决方案
一、密碼存儲安全
不存儲明文密碼,也不存儲密碼的MD5(現在的技術可以破解MD5,不安全)。
?
建議方案:采用加鹽、不可逆的密碼算法,并且使得同一個明文密碼,每次加密結果都不一樣。
?
二、一般安全性措施
1、防止用戶無限次嘗試密碼,暴力登錄
方案舉例:某個用戶密碼輸錯3次后,鎖定該用戶1分鐘,如果輸錯10次,鎖定2小時。
?
2、日志脫敏
禁止把用戶的明文密碼 打印到日志中,或者顯示在錯誤信息中。
?
3、智能防盜分析
比如,記錄用戶每次的登錄時間、次數、IP和地區等信息,智能分析這些信息,如果有異常及時采取措施。
?
三、密碼傳輸安全——使用HTTPS
通過HTTPS傳輸的數據,可以認為是安全的。
?
四、密碼傳輸安全——不使用HTTPS
由于網絡傳輸不安全,數據容易被截取到,故應做好以下兩方面的措施:
1、防止密碼明文傳輸;
2、防止加密后的密碼,被輕易破解;
?
假設攻擊者可以進行網絡抓包。它可以拿到加密后的密碼、加密算法和加密的密鑰。
但是,這個密碼是一次性使用的,如果它再次訪問,就無效。(具體來說,每次的密匙從后端獲取,后端有記錄、有過期時間,如果使用過一次,就不允許再用)
?
由于攻擊者不知道真實密碼,而且每次加密后的密碼不一樣,沒有規則,故攻擊者無法猜測。
前端做成非對稱加密,只有服務器端才能解密,攻擊者即使知道算法也無法解密。
?
3、防重放攻擊和中間人攻擊
至于防重放,關鍵是時間戳與簽名。可以由后端發鹽和時間戳和公鑰,然后由js計算與服務器的時間差,等提交的時候提交一個與后端當前時間誤差極小的時間戳和鹽的公鑰簽名,后端驗證時間戳誤差在安全范圍之內且當前時間戳大于上次請求的時間戳,然后簽名一致即可。
?
http防中間人在理論上不可行,主要是http協議是無狀態,中間人很容易就能偽造請求,并且前端想知道這個請求來自可信的后端是不可能。據我目前所了解的知識來說,ssl可以實現相對安全,前提是由人來確保根證書的可信列表以及識別瀏覽器給出的證書警告信息。
?
如果只是預防http協議下網絡嗅探等直接暴露明文密碼,只要實現了用戶密碼加密與防重放,其實就夠了。
?
參考資料:
https://www.zhihu.com/question/20306241
1、對于敏感post,客戶端首先發一個預備請求,這時服務器回應一個隨機的token。客戶端拿到后,用一種對稱加密(應該是非對稱,zollty更正)方式將(密碼+token)加密,然后提交。服務器處理完后丟棄這個token?,F在讓我們看看監聽者的情況。監聽總是滯后的,由于服務器會在處理完后立即丟棄token,因此滯后的重復提交是無效的。假設監聽者模擬這整個拿到token+提交的過程,由于他不知道加密算法,因此也無法成功。
?
總結
 
                            
                        - 上一篇: 读书的方法摘录——张五常
- 下一篇: VGA/QVGA/WVGA/XGA/SX
