最近,關注了一下關於web端登陸、傳輸數據加密的情景。發現了一些有意思的事情。某互聯網金融公司程序員作登陸驗證,先來一發md5加密,而後就自豪的說個人登陸是加密的,外人沒法破解,絕對保障用戶的信息安全。過後博主發現,my gold,全站http協議,僅僅登陸使用了md5加密。 ps: 偷偷笑...前端
接下來,博主分享一些本身知道的東西,瞭解也不深,你們看看,瞭解一下就好。程序員
大體列了一個目錄,道友們根據本身狀況來看哈。有些知識仍是須要鋪墊一下的。web
1. 首先,咱們先來對這2種傳輸協議作個簡單瞭解。網站
http: 超文本傳輸協議,用於Web瀏覽器和網站服務器之間傳遞信息。明文方式發送內容,不提供任何方式的數據加密,入侵者能夠抓包直接獲取傳輸的報文,進而獲取用戶數據。
https: 安全套接字層超文本傳輸協議,它在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊加密。
分爲兩種:一種是創建一個信息安全通道,來保證數據傳輸的安全;另外一種就是確認網站的真實性。ui
2. 而後,咱們來比較一下這2種協議加密
a、https協議須要到ca申請證書,通常免費證書較少,於是須要必定費用。 而http不要錢
b、http是超文本傳輸協議,信息是明文傳輸,https則是具備安全性的ssl加密傳輸協議。
c、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。
d、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
3. 在這簡單介紹一下https的一個步驟
a、客戶使用https的URL訪問Web服務器,要求與Web服務器創建SSL鏈接。
b、Web服務器收到客戶端請求後,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。
c、客戶端的瀏覽器與Web服務器開始協商SSL鏈接的安全等級,也就是信息加密的等級。
d、客戶端的瀏覽器根據雙方贊成的安全等級,創建會話密鑰,而後利用網站的公鑰將會話密鑰加密,並傳送給網站。
e、Web服務器利用本身的私鑰解密出會話密鑰。
f、Web服務器利用會話密鑰加密與客戶端之間的通訊。
看到這,相信你們應該對這2種協議已經有個比較清晰的印象了。有人就說了,這https這麼牛逼,彷佛這個加密問題已經解決了。可是遠沒那麼簡單,https雖然安全,可是它對於黑客攻擊、服務器劫持啥的,仍是形同虛設,沒多大用處。並且這些提供證書的機構、組織啦,說白了仍是人,人家有你的證書,這些人能夠拿着你的證書光明正大的解密。
ps: 好了,閒話說到這,這塊就是讓你們瞭解一下咱們平時用的傳輸協議。
一般在web端的數據傳輸中,大部分數據是明文,不須要加密的。博主認爲須要加密的數據分2種
1. 用戶的登陸信息。 (帳號、密碼。。。)
2. 用戶的私密信息。(姓名、銀行卡號、家庭住址。。。)
針對這2種數據,咱們對加密的要求也是有所區別的,後者重要性稍弱了前者
如今咱們知道,http協議是明文傳輸,只要別人一抓包就能夠獲取到傳輸的報文,不少人會問,是否是http傳輸時前端都不須要進行數據加密了呢? 這個觀點是大大錯誤了,咱們經過下邊幾點來分析一下,即使不安全也要加密的必要性
1. 前端對用戶密碼進行哈希值加密,好比說 md5 ,而後別人抓包,能夠模擬登錄了。可是他僅僅是能登錄,他並不知道你的源密碼是啥,他截獲的是md5加密過的密文,這樣就大大下降了社會學攻擊。(解釋一些,社會學攻擊。你們習慣性將各個平臺帳號設置爲一個或者幾個密碼,方便記憶,人家拿了你一個,就去試別的,Duang!爆炸了!)
2. 前端加密也有必定安全性。咱們簡單的加密,會被抓包,那咱們能夠將加密變得複雜一些。使這個直接抓包沒法登錄,或者不容易登錄。
繼續上面的話題,咱們怎麼加密,讓數據傳輸更安全,下面舉幾個例子
1. 使用 https。 你甚至能夠用https登錄,完事再重定向到http的頁面,保證你頁面加載的流暢性
2. 就用 http。將 密碼+時間戳 加密後傳輸,服務端解密,並按照時間戳3s有效的方式容許登錄.這樣也能增強安全性 ps:3s 是我 yy 的哈
3. 仿照 qq 網頁版登陸的模式
function getEncryption(password, uin, vcode, isMd5) {
var str1 = hexchar2bin(isMd5 ? password : md5(password));
var str2 = md5(str1 + uin);
var str3 = md5(str2 + vcode.toUpperCase());
return str3
}
仿照qq登陸的模式。咱們能夠在打開登陸界面的時候,同時傳輸一個圖形驗證碼,驗證碼在後臺有惟一性、時效性、一次性 的存儲。這樣登陸時將帳號、密碼、驗證碼、加密方式一同使用某不可逆加密方式加密,通常就用md5吧,這樣服務端用相同的方式加密,比對加密後的密文判斷登陸。這樣即使知道你的加密代碼,也不容易攻破。
4. 還有一種就是如今最簡單的,直接手機號+驗證碼登陸,安全有效、簡單。固然信息一樣須要加密。
以上就是全部內容了,介紹的比較淺,適合你們瞭解。正兒八經的web 安全學,東西太多,也待完善。若是文中有錯誤,還望指出!