鍍金池/ 問答/HTML5  PHP  HTML/ jwt前端加密后端解密

jwt前端加密后端解密

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


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

回答
編輯回答
涼薄
  1. https應該是簡單而有效的方法。
  2. 如果你沒有解決傳輸被偷聽的問題,那么就必須解決“重放”的問題

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

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

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

2017年10月27日 05:34
編輯回答
離夢

token被攔截,拿到token,沒有key也無法破解token啊,jwt只是來表明用戶身份信息的,一般不會把密碼信息放入其中,客戶端處理的方式不安全

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

“用戶輸入賬號和密碼如果這個請求被攔截了就能拿到了賬號密碼”
在發(fā)送前的密碼就是被加密過的,后端存儲的是加密后的密碼,后端無法解密密碼,也不需要

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

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

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

先不管JWT和SESSION機制,我來討論下網(wǎng)絡安全問題,可能說的不對,歡迎指正。

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

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

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

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

但是傳輸?shù)闹黧w內(nèi)容是不能采用哈希算法,因為雙方必須知道具體的內(nèi)容,這導致了中間人會看到明文的內(nèi)容;(簡單的JS對稱加密是無用的,因為HTML是明文的,中間人也可以看到對稱加密的秘鑰)

HTTPS解決的就是對稱加密的問題,將證書提前準備好,并通過瀏覽器預先安裝的根證書來避免中間人偽造證書,這從根本上解決對稱加密的秘鑰問題。

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

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

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

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

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

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

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

用戶密碼被攔截,泄露那是用戶自己的事。服務端只要驗證密碼符合規(guī)則就行。什麼對稱非對稱加密,只要驗證規(guī)則對了就承認這個用戶

2018年8月1日 21:24