- 最近無(wú)意間沒(méi)事的時(shí)候,聽(tīng)了一節(jié)公開(kāi)課忱嘹,受益匪淺嘱腥。防止以后忘記,所以在此記錄一下拘悦。
app的安全性一直是比較重點(diǎn)的話題齿兔。一個(gè)app如果沒(méi)有經(jīng)過(guò)深思熟慮的安全考察,一旦被黑客攻克窄做,那么后果將不堪設(shè)想愧驱。
一般沒(méi)有絕對(duì)安全的app,我們只能設(shè)定為相對(duì)安全椭盏。那么组砚,一個(gè)app的相對(duì)安全是指的什么呢?
app被破解的成本 > app所產(chǎn)生的利益
那么此時(shí)掏颊,就說(shuō)明糟红,我們的app是相對(duì)安全的。
例如乌叶,我們app的登錄安全性問(wèn)題盆偿。
我們都知道app的登錄密碼需要加密,那么准浴,當(dāng)前的加密方式有散列加密事扭,對(duì)稱加密,非對(duì)稱加密等等乐横。
在過(guò)去做app加密的時(shí)候求橄,我們通常直接將app的密碼直接保存在服務(wù)器,然后有找回密碼的功能葡公,其實(shí)這個(gè)是非常不安全的罐农,如果我們的app有幾十萬(wàn)用戶的時(shí)候,黑客一旦破解了我們的服務(wù)器催什,那么我們用戶的密碼就會(huì)暴露在黑客的眼下涵亏,造成的損失將是我們無(wú)法估量的。
所以蒲凶,一般都會(huì)對(duì)app進(jìn)行MD5加密气筋,然后將其保存在服務(wù)器,因?yàn)镸D5是一種不可逆的加密方式旋圆,如果黑客破解裆悄,他們也無(wú)法得到想要的結(jié)果。但是臂聋,現(xiàn)在竟有公司或者某個(gè)地方統(tǒng)計(jì)每個(gè)數(shù)字或者字符以MD5的方式光稼,數(shù)以億萬(wàn)級(jí)的保存這些東西或南,然后暴力破解我們的這些數(shù)據(jù)。實(shí)在讓人難以置信艾君。
- 所以采够,開(kāi)發(fā)者為了防止這些發(fā)生,就對(duì)當(dāng)前的密碼進(jìn)行加鹽冰垄,并把加鹽的一些東西放在當(dāng)前app里面蹬癌。但是這也是非常不安全的,現(xiàn)在逆向技術(shù)已經(jīng)很深入了虹茶,破殼然后破解你app里面的加鹽常量也只是時(shí)間問(wèn)題逝薪,所以,這必然也是不行的蝴罪。況且最危險(xiǎn)的人還是開(kāi)發(fā)者董济,知道這個(gè)加鹽變量,無(wú)疑對(duì)公司造成一定的影響要门。
- 隨后虏肾,又有人發(fā)現(xiàn)了一些技巧,就是利用隨機(jī)數(shù)來(lái)隨機(jī)生成MD5欢搜,這樣就能防止開(kāi)發(fā)者或者暴露的全部對(duì)象封豪。常見(jiàn)的有HMAC加密。思路是:
服務(wù)器根據(jù)用戶名(userid)隨意創(chuàng)建一個(gè)key炒瘟,然后根據(jù)這個(gè)key返回給客戶端吹埠,客戶端根據(jù)這個(gè)key給每個(gè)用戶的密碼進(jìn)行HMAC加密,隨后根據(jù)這個(gè)加密匹配服務(wù)器即可疮装。
這樣做藻雌,即使黑客破解了,也只是破解了一個(gè)用戶斩个,其他用戶也不會(huì)受到影響。
- 但是此時(shí)驯杜,又有一個(gè)問(wèn)題受啥,很多人完全都不需要你這個(gè)密碼是什么,直接抓包或者破解拿到你這個(gè)md5的串鸽心,然后根據(jù)這個(gè)串請(qǐng)求服務(wù)器滚局,這樣就相當(dāng)于模擬登陸了。此時(shí)也相當(dāng)于獲取了用戶的信息顽频。解決方法:
根據(jù)這個(gè)方式藤肢,我們?cè)诩用艿淖址屑由蠒r(shí)間 當(dāng)前年月日, 當(dāng)然這個(gè)時(shí)間是從服務(wù)器那邊返回的糯景,然后根據(jù)這個(gè)時(shí)間去拼接字符串嘁圈,
隨后再進(jìn)行MD5加密省骂,然后去請(qǐng)求服務(wù)器。服務(wù)器根據(jù)這個(gè)串在2分鐘或者設(shè)定時(shí)間以內(nèi)去遍歷然后驗(yàn)證最住。這樣就避免了黑客早早的拿到
我們的這個(gè)串一直作請(qǐng)求钞澳。
以上就是聽(tīng)取公開(kāi)課的重點(diǎn)內(nèi)容,還是比較有益處的涨缚。如果你有更好的防范方法轧粟,歡迎給我留言一起交流。