Web登錄很簡(jiǎn)單?開(kāi)玩笑!
本文通過(guò) Web 登錄的例子探討安全問(wèn)題,登錄不僅僅是簡(jiǎn)單地表達(dá)提交和記錄寫入,其安全問(wèn)題才是重中之重。
1. 一個(gè)簡(jiǎn)單的HTML例子看看用戶信息安全
標(biāo)準(zhǔn)的HTML語(yǔ)法中,支持在form表單中使用<input></input>標(biāo)簽來(lái)創(chuàng)建一個(gè)HTTP提交的屬性,現(xiàn)代的WEB登錄中,常見(jiàn)的是下面這樣的表單:
<form action= "Application/login" method = "POST">
用戶名:<input id="username" name="username" type="text"/>
密碼:<input id="password" name="password" type="password" />
<button type="submit">登陸</button>
</form>
例如我的賬號(hào)是user1,密碼是123456,那么我在提交登錄的時(shí)候會(huì)給后臺(tái)發(fā)送的HTTP請(qǐng)求如下(Chrome或者FireFox開(kāi)發(fā)者工具捕獲,需開(kāi)啟Preserve log):
2. HTTP協(xié)議傳輸直接暴露用戶密碼字段

3. 使用加密算法能保證密碼安全嗎?
對(duì)稱加密:采用對(duì)稱密碼編碼技術(shù),它的特點(diǎn)是文件加密和解密使用相同的密鑰加密。
非對(duì)稱加密:需要兩個(gè)密鑰,公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。
3.1 使用對(duì)稱加密
加密解密在前后臺(tái)協(xié)商后,似乎是個(gè)不錯(cuò)的辦法,比如,前臺(tái)使用一個(gè)字符串位移+字符串反轉(zhuǎn)的簡(jiǎn)單方法(舉個(gè)例子,當(dāng)然不能這么簡(jiǎn)單)。那么,如果原密碼123456先移位:
123456-->456123
456123-->321654
那么這樣簡(jiǎn)單的方法似乎可以混淆原密碼,并且輕松由后臺(tái)進(jìn)行相反操作復(fù)原。但是這有兩個(gè)缺點(diǎn):
3.2 非對(duì)稱加密HTTPS就一定是安全的嗎?
但是HTTPS就一定安全嗎?HTTP存在兩種可能的風(fēng)險(xiǎn):
4. 結(jié)論是,無(wú)論HTTP還是HTTPS,密碼必須密文傳輸
5. 那太好了!這樣可以省下HTTPS的錢了,真是這樣嗎?

5.1 方案一:驗(yàn)證碼
5.2 方案二:token令牌
6. 太不容易了!可是還別高興的太早,當(dāng)心數(shù)據(jù)被篡改
6.1 什么是“數(shù)字摘要”
6.2 數(shù)字簽名--水到渠成的技術(shù)
7. 總結(jié)
補(bǔ)充1:JS加密函數(shù)存在被破解
如果黑客通過(guò)閱讀前端js源碼,發(fā)現(xiàn)加密算法,是否意味他可以構(gòu)造可以
被服務(wù)端解密的checkCode 來(lái)欺騙服務(wù)端呢 ?
摘要或加密JS算法不直接以靜態(tài)文件的形式存在瀏覽器中,而是讓W(xué)EB端去請(qǐng)求Server,服務(wù)器可以根據(jù)隨機(jī)令牌token值決定返回一個(gè)相應(yīng)隨機(jī)的加密策略,以JS代碼響應(yīng)的方式返回,在異步請(qǐng)求響應(yīng)中,加載JS摘要算法,這樣客戶端就可以動(dòng)態(tài)加載數(shù)字摘要策略,保證無(wú)法仿造。
補(bǔ)充2:MD5存在隱患的問(wèn)題
用MD5、SHA256 處理密碼的過(guò)時(shí)了。。?,F(xiàn)在 PBKDF、bcrypt 都在過(guò)時(shí)中。
對(duì)于MD5的破解,實(shí)際上都屬于【碰撞】。比如原文A通過(guò)MD5可以生成摘要M,我們并不需要把M還原成A,只需要找到原文B,生成同樣的摘要M即可。
設(shè)MD5的哈希函數(shù)是MD5(),那么:
MD5(A) = M
MD5(B) = M
任意一個(gè)B即為破解結(jié)果。
B有可能等于A,也可能不等于A。
原文:www.cnblogs.com/letcafe
獲取更多學(xué)習(xí)資料
視頻 | 面試 | 技術(shù) | 電子書
程序員編程:javaje
小編微信:BW22266688
我知道你“在看”
評(píng)論
圖片
表情

