3 回答

TA貢獻1806條經驗 獲得超5個贊
這不安全,解釋原因很簡單:
如果您在客戶端散列密碼并使用該令牌而不是密碼,則攻擊者將不太可能找到密碼。
但是,攻擊者并不需要找出密碼是什么,因為您的服務器不期待任何密碼更多-這是預期的令牌。并且攻擊者確實知道令牌,因為它是通過未加密的HTTP發送的!
現在,有可能將某種挑戰/響應形式的加密混合在一起,這意味著相同的密碼將在每個請求中產生不同的令牌。但是,這將要求密碼以可解密的格式存儲在服務器上,這是不理想的,但可能是一個合適的折衷方案。
最后,你真的想要用戶在登錄你的網站之前打開javascript嗎?
在任何情況下,SSL都不再昂貴或者特別難以設置解決方案

TA貢獻1785條經驗 獲得超4個贊
我會選擇這個簡單的解決方案。
總結一下:
客戶“我要登錄”
服務器生成隨機數
#S
并將其發送到客戶端客戶
讀取用戶鍵入的用戶名和密碼
計算密碼的哈希值,獲取
h(pw)
(這是存儲在數據庫中的內容)生成另一個隨機數
#C
連接
h(pw) + #S + #C
并計算其哈希值,調用它h(all)
發送到服務器
username
,#C
和h(all)
服務器
從DB 檢索
h(pw)'
指定username
的現在它有所有要計算的元素
h(all')
,就像客戶那樣if
h(all)
=h(all')
thenh(pw)
=h(pw)'
,幾乎可以肯定
沒有人可以重復以指定用戶身份登錄的請求。#S
每次都向哈希添加一個變量組件(它是基礎)。#C
增加額外的噪音。
添加回答
舉報