JWT的安全問題


一、前言

在如今,微服務架構越來越流行了,項目也越來越多采用前后端項目分離,一般在權限控制中采用JWT進行處理。

二、JWT介紹

JWT是一種認證協議是最后輸出為token,然后把token進行傳到客戶端,客戶端訪問api通過filter解析token,獲得jwt中的信息,進行判斷操作。

jwt分為三部分 ,header、payload

、Signature。 header是具有哈希算法、以及typ類型。

哈希算法可以采用SHA256等 ,哈希算法不是加密算法。它是值把一個值進行通過哈希碰撞生成一個加密的值,是不存在解密的,唯一解密的方式就是重復試值進行碰撞產生相同的值。

payload是值我們需要傳入的信息,一般不要進行敏感的信息。然后使用Base64編碼,Header也是使用Base64編碼

JWT 的最后一部分是 Signature ,這部分內容有三個部分,先是用 Base64 編碼的 header 和 payload ,再用加密算法加密一下,加密的時候要放進去一個 Secret ,這個相當於是一個密碼,這個密碼秘密地存儲在服務端。

三、安全問題

1.如果其他用戶獲得我們電腦上的token,那么他們就能模仿真實用戶進行操作(黑客監控電腦,獲得網站發送的token,進行操作)?

     對於敏感的api接口,需使用https 。https是在http超文本傳輸協議加入SSL層,它在網絡間通信是加密的,所以需要加密證書。

2.我們是否可以偽造用戶token進行訪問?

不可以,因為你無法使用服務器的簽名,就是你自己的密鑰簽名的信息服務器識別不了。

3.我們是否可以修改token中body的信息?

不能,修改了之后簽名信息就不正確,然后就無法驗證簽名,說明數據被修改了。

 

四. csdn中的http和https的一種回復

Question:app登錄后,服務端返回一個token,app存在客戶端,下次再打開app時,直接讀token,傳token到服務端做驗證,免去重新輸入用戶密碼的麻煩,這個token存儲在header里,目前看大多數app都是這樣做,但如果黑客抓包獲取到token,偽造http 請求,對服務器做操作,那豈不是很不安全。。。

Answer:這方法確實不好啊,不能只依賴於http的header里的東西來認證,太容易模仿。最簡單的方法可能就是走https,客戶端只要接受服務器端的簽名即可。

理解:簽名就是驗證信息的唯一性,如果中間人進行獲得token,那么無法進行公鑰簽名,服務器獲得token之后還要進行解密的,因此這個方法可以進行避免攻擊。

 

中間人如何抓包獲取局域網的http請求?

 

五、總結

     對於敏感的api接口,需使用https 。https是在http超文本傳輸協議加入SSL層,它在網絡間通信是加密的,所以需要加密證書。

     采用https 或者 代碼層面也可以做安全檢測,比如ip地址發生變化,MAC地址發生變化等等,可以要求重新登錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM