歡迎來到 常識詞典網(wǎng) , 一個專業(yè)的常識知識學習網(wǎng)站!
[ Ctrl + D 鍵 ]收藏本站
如何保證用戶登陸時提交密碼已經(jīng)加密?密碼是否已加密,需要客戶端和服務端建立約定,雙方按約定辦事就行了。
這里提到的另一個問題是,如何保證傳輸安全?
最理想的方案當然是走 HTTPS 協(xié)議. HTTPS 在理論上是可靠的,但在國內(nèi)會打一些折扣:你可以隨便找一臺電腦看看有沒有安裝商業(yè)公司或機構(gòu)的根證書,這些根證書為線路某節(jié)點成為中間人提供了可能性;同時,在木馬橫行的年代,密碼在加密提交前可能就被拿到了,此時 HTTPS 成了擺設(shè),這是為什么國內(nèi)流行密碼控件的一個重要原因。
從成本和需求上考慮,對于眾多對安全性要求不高的個人網(wǎng)站,仍然可以考慮采用 HTTP 傳輸,密碼提交前通過 JavaScript 加密。由于 JavaScript 代碼暴露在客戶端,因此一般通過不可逆的加密方法加密密碼,而對于任何摘要式的加密算法,都可以通過類似 md5 字典的方式直接查表獲知弱密碼,所以要混入 salt 以增加制作字典的成本??上攵?,解密只是時間成本的問題。因此這里的重要前提是“對安全性要求不高”。
如何驗證密碼呢?一個可行的方法是,客戶端提交 md5(password) 密碼(如上所述,此方法只是簡單保護了密碼,是可能被查表獲取密碼的)。服務端數(shù)據(jù)庫通過 md5(salt+md5(password)) 的規(guī)則存儲密碼,該 salt 僅存儲在服務端,且在每次存儲密碼時都隨機生成。這樣即使被拖庫,制作字典的成本也非常高。
密碼被 md5() 提交到服務端之后,可通過 md5(salt + form['password']) 與數(shù)據(jù)庫密碼比對。此方法可以在避免明文存儲密碼的前提下,實現(xiàn)密碼加密提交與驗證。
這里還有防止 replay 攻擊(請求被重新發(fā)出一次即可能通過驗證)的問題,由服務端頒發(fā)并驗證一個帶有時間戳的可信 token (或一次性的)即可。
當然,傳輸過程再有 HTTPS 加持那就更好了。
最后,為什么要密碼控件?原因之一是上面說的,要防止密碼在提交前被截獲。當然,還有一些其他原因,工作所限,這里就不說了。
下一篇:sitecore引用作為一個強大的在線客戶體驗管理 下一篇 【方向鍵 ( → )下一篇】
上一篇:航班管家這款應用應該做哪些改進? 上一篇 【方向鍵 ( ← )上一篇】
快搜