由CSDN泄密想到的:MySQL數(shù)據(jù)庫(kù)驗(yàn)證過(guò)程的改進(jìn)、密碼存儲(chǔ)及驗(yàn)證方
來(lái)源:懂視網(wǎng)
責(zé)編:小采
時(shí)間:2020-11-09 13:17:04
由CSDN泄密想到的:MySQL數(shù)據(jù)庫(kù)驗(yàn)證過(guò)程的改進(jìn)、密碼存儲(chǔ)及驗(yàn)證方
由CSDN泄密想到的:MySQL數(shù)據(jù)庫(kù)驗(yàn)證過(guò)程的改進(jìn)、密碼存儲(chǔ)及驗(yàn)證方:這幾天CSDN數(shù)據(jù)庫(kù)明文密碼泄密鬧得滿(mǎn)城風(fēng)雨,人人自危。大家開(kāi)始關(guān)注網(wǎng)絡(luò)安全和隱私問(wèn)題。由這次的問(wèn)題,對(duì)加密驗(yàn)證過(guò)程我也思考過(guò),有沒(méi)有一套相對(duì)安全的存儲(chǔ)和驗(yàn)證方法?這里我根據(jù)各種驗(yàn)證方法,確實(shí)總結(jié)了一套可行且相對(duì)安全的存儲(chǔ)和驗(yàn)證方法,且看我細(xì)
導(dǎo)讀由CSDN泄密想到的:MySQL數(shù)據(jù)庫(kù)驗(yàn)證過(guò)程的改進(jìn)、密碼存儲(chǔ)及驗(yàn)證方:這幾天CSDN數(shù)據(jù)庫(kù)明文密碼泄密鬧得滿(mǎn)城風(fēng)雨,人人自危。大家開(kāi)始關(guān)注網(wǎng)絡(luò)安全和隱私問(wèn)題。由這次的問(wèn)題,對(duì)加密驗(yàn)證過(guò)程我也思考過(guò),有沒(méi)有一套相對(duì)安全的存儲(chǔ)和驗(yàn)證方法?這里我根據(jù)各種驗(yàn)證方法,確實(shí)總結(jié)了一套可行且相對(duì)安全的存儲(chǔ)和驗(yàn)證方法,且看我細(xì)

這幾天CSDN數(shù)據(jù)庫(kù)明文密碼泄密鬧得滿(mǎn)城風(fēng)雨,人人自危。大家開(kāi)始關(guān)注網(wǎng)絡(luò)安全和隱私問(wèn)題。由這次的問(wèn)題,對(duì)加密驗(yàn)證過(guò)程我也思考過(guò),有沒(méi)有一套相對(duì)安全的存儲(chǔ)和驗(yàn)證方法?這里我根據(jù)各種驗(yàn)證方法,確實(shí)總結(jié)了一套可行且相對(duì)安全的存儲(chǔ)和驗(yàn)證方法,且看我細(xì)
這幾天CSDN數(shù)據(jù)庫(kù)明文密碼泄密鬧得滿(mǎn)城風(fēng)雨,人人自危。大家開(kāi)始關(guān)注網(wǎng)絡(luò)安全和隱私問(wèn)題。由這次的問(wèn)題,對(duì)加密驗(yàn)證過(guò)程我也思考過(guò),有沒(méi)有一套相對(duì)安全的存儲(chǔ)和驗(yàn)證方法?這里我根據(jù)各種驗(yàn)證方法,確實(shí)總結(jié)了一套可行且相對(duì)安全的存儲(chǔ)和驗(yàn)證方法,且看我細(xì)細(xì)道來(lái),最后提出MySQL當(dāng)前驗(yàn)證方法的改進(jìn)。– by 譚俊青
一個(gè)系統(tǒng)對(duì)用戶(hù)請(qǐng)求的合法性驗(yàn)證都是通過(guò)sessionid來(lái)判斷的,這個(gè)層面的攻擊和破解這里不涉及,我們只關(guān)心在session建立前的驗(yàn)證過(guò)程。密碼存儲(chǔ)的方式和驗(yàn)證方法大致可以歸結(jié)為以下幾種:
- 密碼明文存儲(chǔ)。比如CSDN的做法,用戶(hù)登陸系統(tǒng)的時(shí)候直接提交明文密碼,跟數(shù)據(jù)庫(kù)中保存的密碼進(jìn)行比較,如果一直,驗(yàn)證通過(guò),建立session。這時(shí)最簡(jiǎn)單,也是最傻的一種做法,所以導(dǎo)致了這次的泄密。對(duì)于密碼一致的用戶(hù)已經(jīng)體會(huì)到了它的危害嚴(yán)重性。
- 密碼加密存儲(chǔ)。對(duì)用戶(hù)密碼進(jìn)行加密存儲(chǔ),登陸驗(yàn)證的過(guò)程跟上面的驗(yàn)證過(guò)程類(lèi)似,只是對(duì)密碼進(jìn)行了加密,或者對(duì)存儲(chǔ)的密文進(jìn)行了解密,然后驗(yàn)證。這種方法稍微提高了一定的安全性,但是還遠(yuǎn)遠(yuǎn)不夠,沒(méi)有從根本上解決問(wèn)題,因?yàn)槿绻诳湍玫搅嗣芪模缓笃平饧用芩惴ǎ梢越饷芩械拿芪模@得所有用戶(hù)的明文密碼,還會(huì)導(dǎo)致像今天CSDN這樣的局面。
- 密碼單向hash存儲(chǔ)。這個(gè)應(yīng)該說(shuō)在根本上解決了問(wèn)題所在。比如存儲(chǔ)md5(password),sha1(password),驗(yàn)證時(shí)只需要比較用戶(hù)輸入的密碼的hash值跟存儲(chǔ)的是否一致即可驗(yàn)證。當(dāng)然這里問(wèn)題又來(lái)了因?yàn)橛腥藭?huì)提出md5破解的問(wèn)題,破解碰撞的概率現(xiàn)在還是相當(dāng)?shù)偷模戎?億彩票大獎(jiǎng)的概率要低得多。但是現(xiàn)在有很多現(xiàn)有的密碼字典,并且已經(jīng)生成了hash值,值需要比較hash值,即可獲得等價(jià)的登陸密碼。因此我們對(duì)這個(gè)方法進(jìn)行改進(jìn),得出下面的方法。
- 密碼還是hash存儲(chǔ),不過(guò)是采用hash(hash(passwordd)+salt)的方式。這里salt可以在注冊(cè)是隨機(jī)生成,也可以取巧用用戶(hù)名,這樣可以在驗(yàn)證的過(guò)程增加隨機(jī)串,而不用將salt輸出止客戶(hù)端。
對(duì)第4種方法進(jìn)行變種,可以得到很多驗(yàn)證方法,都相對(duì)安全可靠得多,但是都存在一個(gè)問(wèn)題,這個(gè)問(wèn)題在mysql4.1之前的版本也存在著,就是如果有人得到存儲(chǔ)的hash值,即可以模擬登陸,并驗(yàn)證通過(guò)。
現(xiàn)在我們回到MySQL密碼的存儲(chǔ)和驗(yàn)證過(guò)程。在4.1之前,mysql的驗(yàn)證方法相對(duì)簡(jiǎn)單,方法如下:
- 首先server給client發(fā)送一個(gè)隨機(jī)串
- client將用戶(hù)輸入的password的hash值對(duì)隨機(jī)串進(jìn)行加密,并將加密串發(fā)送給server
- server用存儲(chǔ)在user表中的password hash串對(duì)之前發(fā)送給client的隨機(jī)串進(jìn)行加密,生成加密串
- server對(duì)接收道的加密串和生成的加密串進(jìn)行比較,如果一致,驗(yàn)證通過(guò)。
這樣的驗(yàn)證方法看似比較安全可靠,即使你監(jiān)聽(tīng)網(wǎng)絡(luò)也不會(huì)獲得password或者其hash值。但是如果有人通過(guò)其他途徑,獲得了password的hash值,那么就可以模擬登陸系統(tǒng),因此我們需要對(duì)驗(yàn)證過(guò)程進(jìn)行改進(jìn)。下面介紹mysql4.1之后的密碼存儲(chǔ)和登陸驗(yàn)證過(guò)程:
server存儲(chǔ)mysql.user.Password =?sha1(sha1(password))
server 發(fā)送隨機(jī)串random_string至client
client 計(jì)算
stage1_hash ?= sha1(password) –password為用戶(hù)輸入的明文密碼
token = sha1( random_string + sha1(stage1_hash)) xor stage1_hash
client 將 token 發(fā)送給server
server 計(jì)算
stage1_hash_2 = token xor sha1( random_string + mysql.user.Password)
sever 比較 sha1(stage1_hash_2) 跟 mysql.user.Password 即可驗(yàn)證
這個(gè)驗(yàn)證過(guò)程看似復(fù)雜,其實(shí)整個(gè)過(guò)程就是為了保證 sha1(password)不被監(jiān)聽(tīng)到,用隨機(jī)串進(jìn)行了干擾。至此我們的密碼存儲(chǔ)方式和驗(yàn)證方法的安全性都得到了極大的提升。 當(dāng)然我們發(fā)現(xiàn)mysql 4.1之后的密碼存儲(chǔ)還是有點(diǎn)小問(wèn)題,沒(méi)有加salt,因此存在一定的風(fēng)險(xiǎn),可以建議官方版本改進(jìn),比如將 salt 用用戶(hù)名代替,整個(gè)驗(yàn)證過(guò)程幾乎不用大的改動(dòng)。
Related posts:
- Golang 實(shí)現(xiàn)的 mysql-proxy
- Gearman
- Handler-Socket Plugin for MySQL – SQL的功能、NoSQL的性能
- NoSQL到MySQL+Memcache(d)重樹(shù)MySQL王者地位
- A new MySQL proxy written in Go — LegendBase Proxy for MySQL
? 譚俊青 發(fā)布在 MySQL性能、MySQL Cluster集群、MySQL HA高可用等研究 - MySQL實(shí)驗(yàn)室, 2011.
可以任意轉(zhuǎn)載, 但轉(zhuǎn)載時(shí)務(wù)必以超鏈接形式標(biāo)明文章原始出處 和 作者信息。
鏈接: http://www.mysqlab.net/blog/2011/12/由csdn泄密想到的《mysql數(shù)據(jù)庫(kù)驗(yàn)證過(guò)程的改進(jìn)》/
標(biāo)簽:
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
由CSDN泄密想到的:MySQL數(shù)據(jù)庫(kù)驗(yàn)證過(guò)程的改進(jìn)、密碼存儲(chǔ)及驗(yàn)證方
由CSDN泄密想到的:MySQL數(shù)據(jù)庫(kù)驗(yàn)證過(guò)程的改進(jìn)、密碼存儲(chǔ)及驗(yàn)證方:這幾天CSDN數(shù)據(jù)庫(kù)明文密碼泄密鬧得滿(mǎn)城風(fēng)雨,人人自危。大家開(kāi)始關(guān)注網(wǎng)絡(luò)安全和隱私問(wèn)題。由這次的問(wèn)題,對(duì)加密驗(yàn)證過(guò)程我也思考過(guò),有沒(méi)有一套相對(duì)安全的存儲(chǔ)和驗(yàn)證方法?這里我根據(jù)各種驗(yàn)證方法,確實(shí)總結(jié)了一套可行且相對(duì)安全的存儲(chǔ)和驗(yàn)證方法,且看我細(xì)