對(duì)于帳號(hào)來(lái)說(shuō),密碼安全非常重要?,F(xiàn)在很多C端采用短信驗(yàn)證/聯(lián)合登錄等方式弱化了固定密碼的作用,無(wú)疑對(duì)登錄安全性提供了很大的保障。但對(duì)于后臺(tái)系統(tǒng)來(lái)說(shuō),基本還是采用傳統(tǒng)帳號(hào)密碼登錄。密碼安全分為存儲(chǔ)安全和傳輸安全,本文主要講述解決傳輸安全。
常規(guī)增強(qiáng)帳號(hào)密碼登錄安全性的方案:
-
加密密碼本身不傳輸明文密碼,但被抓包可以直接重放請(qǐng)求,有無(wú)明文都無(wú)所謂 -
HTTPS提升抓包解包的難度
其實(shí)對(duì)于數(shù)據(jù)安全的考慮都是加密數(shù)據(jù),但如果加密后的數(shù)據(jù)也有價(jià)值可被利用,同樣是不安全的。我們可以發(fā)現(xiàn)不管你如何加密數(shù)據(jù),只要?jiǎng)e人抓到你的請(qǐng)求數(shù)據(jù)包,再發(fā)一份,一樣可以實(shí)現(xiàn)目的。
那我們?nèi)绾蝸?lái)防止重放請(qǐng)求
- 簡(jiǎn)單一點(diǎn)對(duì)請(qǐng)求數(shù)據(jù)做一個(gè)標(biāo)識(shí)存起來(lái),重發(fā)的時(shí)候檢查一遍,已經(jīng)處理過(guò)就不處理??尚?,但我們的緩存是有限的,不可能一直存著。
- 那反著來(lái),由后端頒發(fā)唯一標(biāo)識(shí)并短期緩存,前端請(qǐng)求帶過(guò)來(lái),檢查標(biāo)識(shí)存在則通過(guò),之后再給標(biāo)識(shí)刪掉。
- 可攻擊的人也可能去請(qǐng)求標(biāo)識(shí),并篡改到抓包的重放請(qǐng)求里。所以我們要把標(biāo)識(shí)和他一定不知道的密碼放在一起加密,這樣便無(wú)法替換。
上面的設(shè)想說(shuō)完了,下面開(kāi)始介紹我的方案
- 前端點(diǎn)擊登錄時(shí)向后端請(qǐng)求獲取
種子(標(biāo)識(shí))-
種子由3個(gè)部分構(gòu)成:-
時(shí)間戳可對(duì)種子校驗(yàn)設(shè)定有效期,過(guò)期請(qǐng)求直接拒絕 隨機(jī)字符-
校驗(yàn)位由前兩個(gè)元素計(jì)算得出
-
-
- 前端將種子與密碼打包加密
- 調(diào)用后端登錄
- 解密
- 校驗(yàn)
種子的校驗(yàn)位 - 校驗(yàn)
種子是否過(guò)期 - 校驗(yàn)請(qǐng)求是否存在
緩存 - 將請(qǐng)求緩存
- 業(yè)務(wù)邏輯。。。
說(shuō)明
- 沒(méi)有與設(shè)想中的一致,是不希望過(guò)期請(qǐng)求也要走緩存查詢才知道。
-
緩存有效期與種子有效期一致。請(qǐng)求重放時(shí),若在種子有效期內(nèi)緩存校驗(yàn)會(huì)不通過(guò),反之種子有效期校驗(yàn)就過(guò)不了。 -
種子最重要的就是時(shí)間戳,但前端的時(shí)間無(wú)意義,所以走后端獲取。
邏輯流程圖

登錄密碼加密.png