鍍金池/ 問(wèn)答/HTML5  PHP  HTML/ jwt前端加密后端解密

jwt前端加密后端解密

最近在學(xué)習(xí)jwt,但是遇到一個(gè)問(wèn)題。
用戶(hù)輸入用戶(hù)名和密碼之后發(fā)送給服務(wù)器,服務(wù)器將其加密后返回token,每次前端請(qǐng)求都帶上這個(gè)token。
于是我產(chǎn)生一個(gè)問(wèn)題:用戶(hù)輸入賬號(hào)和密碼如果這個(gè)請(qǐng)求被攔截了就能拿到了賬號(hào)密碼,但是有一種叫openssl的東西,就是要求域名用https。但是這種方式也不是十分安全。
既然jwt有JavaScript版,那為啥不在前端就加密了,之后后端解密去驗(yàn)證呢?
問(wèn)題:jwt前端加密賬號(hào)密碼,后端解密如何實(shí)現(xiàn)?


現(xiàn)在做的項(xiàng)目也有token的做法,實(shí)現(xiàn)方式:
1.頁(yè)面加載前端發(fā)送一個(gè)16位后端就會(huì)返回一個(gè)publick_key。
2.前端收到這個(gè)public_key將用戶(hù)名密碼還有一個(gè)16位的隨機(jī)數(shù)用md5加密。
3.登陸的時(shí)候?qū)⑸厦娴募用馨l(fā)送給后端,后端使用private_key解密后得到加密的數(shù)據(jù)。
我想上面的實(shí)現(xiàn)方式就跟jwt類(lèi)似。

回答
編輯回答
涼薄
  1. https應(yīng)該是簡(jiǎn)單而有效的方法。
  2. 如果你沒(méi)有解決傳輸被偷聽(tīng)的問(wèn)題,那么就必須解決“重放”的問(wèn)題

比如,你將密碼用md5加密后再傳,那別人也可以截獲你md5后的密碼進(jìn)行重放。就算你的密碼不但md5加密了,還用非對(duì)稱(chēng)加密再包一層,別人同樣截獲的是你最終的加密結(jié)果來(lái)重放。

用戶(hù)的密碼是不變的,如何讓一個(gè)“密碼”只能有效一次,是解決重放的關(guān)鍵思路,一般可以用黑白名單的方式來(lái)實(shí)驗(yàn),具體可以自己試試。

另外,登錄成功后使用JWT時(shí),要注意JWT必須有“有效時(shí)間”的判斷,否則,一旦jwt被攔截竊取,會(huì)持續(xù)有效,直到你改secret

2017年10月27日 05:34
編輯回答
離夢(mèng)

token被攔截,拿到token,沒(méi)有key也無(wú)法破解token啊,jwt只是來(lái)表明用戶(hù)身份信息的,一般不會(huì)把密碼信息放入其中,客戶(hù)端處理的方式不安全

2017年8月23日 15:08
編輯回答
心夠野

“用戶(hù)輸入賬號(hào)和密碼如果這個(gè)請(qǐng)求被攔截了就能拿到了賬號(hào)密碼”
在發(fā)送前的密碼就是被加密過(guò)的,后端存儲(chǔ)的是加密后的密碼,后端無(wú)法解密密碼,也不需要

2017年11月21日 12:11
編輯回答
朕略萌

之前使用過(guò)一種前端加密,希望對(duì)你有用。前端直接將用戶(hù)輸入的密碼值使用md5加密后,val=md5(value);將val的值傳個(gè)后臺(tái),這樣是不是能解決你這個(gè)問(wèn)題,此處不限制使用其他加密方式

2017年1月6日 04:48
編輯回答
傻叼

先不管JWT和SESSION機(jī)制,我來(lái)討論下網(wǎng)絡(luò)安全問(wèn)題,可能說(shuō)的不對(duì),歡迎指正。

假定現(xiàn)在你的電腦不安全,電腦中被安裝了木馬監(jiān)聽(tīng),同時(shí)網(wǎng)關(guān)里有也中間人:

  1. 無(wú)論你的網(wǎng)頁(yè)中是否加密,你在鍵盤(pán)中輸入的任何數(shù)據(jù)都會(huì)被木馬監(jiān)聽(tīng)到,這是操作系統(tǒng)層的監(jiān)聽(tīng);
  2. 你在網(wǎng)頁(yè)中鍵入的請(qǐng)求以及接收到的響應(yīng),通過(guò)網(wǎng)關(guān)都會(huì)被中間人攔截,這是路由層的監(jiān)聽(tīng);

所以,加密密碼必須采用哈希算法,而不是對(duì)稱(chēng)加密;不然中間人既然可以攔截所有的請(qǐng)求和響應(yīng),而js又是明文,你如何保證對(duì)稱(chēng)加密的秘鑰不被中間人看到呢?

你可能會(huì)問(wèn)加密的密碼也會(huì)被看到,中間人也可以繞開(kāi)網(wǎng)頁(yè),直接發(fā)包模擬請(qǐng)求。是的,確實(shí)如此;加密密碼解決的是不讓你的密碼被明文泄露,這樣中間人無(wú)法用你的賬戶(hù)密碼去其他應(yīng)用中撞庫(kù)。

但是傳輸?shù)闹黧w內(nèi)容是不能采用哈希算法,因?yàn)殡p方必須知道具體的內(nèi)容,這導(dǎo)致了中間人會(huì)看到明文的內(nèi)容;(簡(jiǎn)單的JS對(duì)稱(chēng)加密是無(wú)用的,因?yàn)镠TML是明文的,中間人也可以看到對(duì)稱(chēng)加密的秘鑰)

HTTPS解決的就是對(duì)稱(chēng)加密的問(wèn)題,將證書(shū)提前準(zhǔn)備好,并通過(guò)瀏覽器預(yù)先安裝的根證書(shū)來(lái)避免中間人偽造證書(shū),這從根本上解決對(duì)稱(chēng)加密的秘鑰問(wèn)題。

而JWT我覺(jué)得從根本上,并不是為了解決網(wǎng)頁(yè)安全問(wèn)題,而是想通過(guò)一種分布式無(wú)狀態(tài)的方式來(lái)解決服務(wù)端的SESSION問(wèn)題。

2017年3月9日 12:31
編輯回答
九年囚

我只要攔截到你加密后的值,還不是一樣可以用么。

假設(shè)你的賬號(hào)是ABCDE,加密后是EDCBA,我完全不需要解密得到你賬號(hào),我只需要把加密后的值原樣傳給你的后端就能拿到權(quán)限。

2018年6月12日 16:13
編輯回答
毀與悔

按你的說(shuō),被截取了。前端的任何加密都是無(wú)用的。
token 都被截取了就好比你的 QQ 和 密碼都給了別人,這時(shí)候才問(wèn)怎么才能讓別人不登錄我的賬號(hào)?
拔它的網(wǎng)線(xiàn)

2018年7月6日 17:07
編輯回答
下墜

用戶(hù)密碼被攔截,泄露那是用戶(hù)自己的事。服務(wù)端只要驗(yàn)證密碼符合規(guī)則就行。什麼對(duì)稱(chēng)非對(duì)稱(chēng)加密,只要驗(yàn)證規(guī)則對(duì)了就承認(rèn)這個(gè)用戶(hù)

2018年8月1日 21:24