Web登錄很簡單?開玩笑!
點擊關(guān)注公眾號,Java干貨及時送達
牛逼!又發(fā)現(xiàn)了一款面試題庫,太全了!!
(點擊查看)
本文通過 Web 登錄的例子探討安全問題,登錄不僅僅是簡單地表達提交和記錄寫入,其安全問題才是重中之重。
1. 一個簡單的HTML例子看看用戶信息安全
標準的HTML語法中,支持在form表單中使用<input></input>標簽來創(chuàng)建一個HTTP提交的屬性,現(xiàn)代的WEB登錄中,常見的是下面這樣的表單:
<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>
例如我的賬號是user1,密碼是123456,那么我在提交登錄的時候會給后臺發(fā)送的HTTP請求如下(Chrome或者FireFox開發(fā)者工具捕獲,需開啟Preserve log):
2. HTTP協(xié)議傳輸直接暴露用戶密碼字段

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

5.1 方案一:驗證碼
5.2 方案二:token令牌
6. 太不容易了!可是還別高興的太早,當心數(shù)據(jù)被篡改
6.1 什么是“數(shù)字摘要”
6.2 數(shù)字簽名--水到渠成的技術(shù)
7. 總結(jié)
補充1:JS加密函數(shù)存在被破解
如果黑客通過閱讀前端js源碼,發(fā)現(xiàn)加密算法,是否意味他可以構(gòu)造可以
被服務(wù)端解密的checkCode 來欺騙服務(wù)端呢 ?
摘要或加密JS算法不直接以靜態(tài)文件的形式存在瀏覽器中,而是讓W(xué)EB端去請求Server,服務(wù)器可以根據(jù)隨機令牌token值決定返回一個相應(yīng)隨機的加密策略,以JS代碼響應(yīng)的方式返回,在異步請求響應(yīng)中,加載JS摘要算法,這樣客戶端就可以動態(tài)加載數(shù)字摘要策略,保證無法仿造。
補充2:MD5存在隱患的問題
用MD5、SHA256 處理密碼的過時了。。?,F(xiàn)在 PBKDF、bcrypt 都在過時中。
對于MD5的破解,實際上都屬于【碰撞】。比如原文A通過MD5可以生成摘要M,我們并不需要把M還原成A,只需要找到原文B,生成同樣的摘要M即可。
設(shè)MD5的哈希函數(shù)是MD5(),那么:
MD5(A) = M
MD5(B) = M
任意一個B即為破解結(jié)果。
B有可能等于A,也可能不等于A。
原文:www.cnblogs.com/letcafe
如有文章對你有幫助,
歡迎關(guān)注??、點贊??、轉(zhuǎn)發(fā)??!
推薦, Java面試題庫,詳情點擊: 牛逼!又發(fā)現(xiàn)了一款牛逼的Java面試題庫,史上最強! 點擊文末“閱讀原文”可直達
評論
圖片
表情


