为什么很多人不推荐你用JWT?

news2024/12/23 23:16:28

为什么很多人不推荐你用JWT?

如果你经常看一些网上的带你做项目的教程,你就会发现 有很多的项目都用到了JWT。那么他到底安全吗?为什么那么多人不推荐你去使用。这个文章将会从全方面的带你了解JWT 以及他的优缺点。

什么是JWT?

这个是他的官网JSON Web Tokens - jwt.io

这个就是JWT

img

JWT 全称JSON Web Token

如果你还不熟悉JWT,不要惊慌!它们并不那么复杂!

你可以把JWT想象成一些JSON数据,你可以验证这些数据是来自你认识的人。

当然如何实现我们在这里不讲,有兴趣的可以去自己了解。

下面我们来说一下他的流程:

  1. 当你登录到一个网站,网站会生成一个JWT并将其发送给你。
  2. 这个JWT就像是一个包裹,里面装着一些关于你身份的信息,比如你的用户名、角色、权限等。
  3. 然后,你在每次与该网站进行通信时都会携带这个JWT
  4. 每当你访问一个需要验证身份的页面时,你都会把这个JWT带给网站
  5. 网站收到JWT后,会验证它的签名以确保它是由网站签发的,并且检查其中的信息来确认你的身份和权限。
  6. 如果一切都通过了验证,你就可以继续访问受保护的页面了。

JWT Session

为什么说JWT很烂?

首先我们用JWT应该就是去做这些事情:

  • 用户注册网站
  • 用户登录网站
  • 用户点击并执行操作
  • 本网站使用用户信息进行创建、更新和删除 信息

这些事情对于数据库的操作经常是这些方面的

  • 记录用户正在执行的操作
  • 将用户的一些数据添加到数据库中
  • 检查用户的权限,看看他们是否可以执行某些操作

之后我们来逐步说出他的一些缺点

大小

这个方面毋庸置疑。

比如我们需要存储一个用户ID 为xiaou

如果存储到cookie里面,我们的总大小只有5个字节。

如果我们将 ID 存储在 一个 JWT 里。他的大小就会增加大概51倍

image-20240506200449402

这无疑就增大了我们的宽带负担。

冗余签名

JWT的主要卖点之一就是其加密签名。因为JWT被加密签名,接收方可以验证JWT是否有效且可信。

但是,在过去20年里几乎每一个网络框架都可以在使用普通的会话cookie时获得加密签名的好处。

事实上,大多数网络框架会自动为你加密签名(甚至加密!)你的cookie。这意味着你可以获得与使用JWT签名相同的好处,而无需使用JWT本身。

实际上,在大多数网络身份验证情况下,JWT数据都是存储在会话cookie中的,这意味着现在有两个级别的签名。一个在cookie本身上,一个在JWT上。

令牌撤销问题

由于令牌在到期之前一直有效,服务器没有简单的方法来撤销它。

以下是一些可能导致这种情况危险的用例。

注销并不能真正使你注销!

想象一下你在推特上发送推文后注销了登录。你可能会认为自己已经从服务器注销了,但事实并非如此。因为JWT是自包含的,将在到期之前一直有效。这可能是5分钟、30分钟或任何作为令牌一部分设置的持续时间。因此,如果有人在此期间获取了该令牌,他们可以继续访问直到它过期。

可能存在陈旧数据

想象一下用户是管理员,被降级为权限较低的普通用户。同样,这不会立即生效,用户将继续保持管理员身份,直到令牌过期。

JWT通常不加密

因此任何能够执行中间人攻击并嗅探JWT的人都拥有你的身份验证凭据。这变得更容易,因为中间人攻击只需要在服务器和客户端之间的连接上完成

安全问题

对于JWT是否安全。我们可以参考这个文章

JWT (JSON Web Token) (in)security - research.securitum.com

同时我们也可以看到是有专门的如何攻击JWT的教程的

高级漏洞篇之JWT攻击专题 - FreeBuf网络安全行业门户

总结

总的来说,JWT适合作为单次授权令牌,用于在两个实体之间传输声明信息。

但是,JWT不适合作为长期持久数据的存储机制,特别是用于管理用户会话。使用JWT作为会话机制可能会引入一系列严重的安全和实现上的问题,相反,对于长期持久数据的存储,更适合使用传统的会话机制,如会话cookie,以及建立在其上的成熟的实现。

但是写了这么多,我还是想说,如果你作为自己开发学习使用,不考虑安全,不考虑性能的情况下,用JWT是完全没有问题的,但是一旦用到生产环境中,我们就需要避免这些可能存在的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1646277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搜索算法系列之四(斐波那契)

以下算法被验证过,如有什么问题或有补充的欢迎留言。 前言 斐波那契数列,又称黄金分割数列,是由意大利数学家(Leonardo Fibonacci)在1202年提出的。这个数列的递推关系是F(0)1,F(1)1,F(n)F(n-…

微搭低代码入门05文件的上传和下载

目录 1 创建数据源2 创建应用3 创建页面4 设置导航功能5 文件上传6 文件下载总结 小程序中,我们通常会有文件的上传和下载的需,在微搭中,文件是存放在云存储中,每一个文件都会有一个唯一的fileid,我们本篇就介绍如何通…

强化学习玩flappy_bird

强化学习玩flappy_bird(代码解析) 游戏地址:https://flappybird.io/ 该游戏的规则是: 点击屏幕则小鸟立即获得向上速度。 不点击屏幕则小鸟受重力加速度影响逐渐掉落。 小鸟碰到地面会死亡,碰到水管会死亡。&#…

vscode连接服务器的docker步骤

进入容器之后,操作方式与本地windows系统操作逻辑一样;容器内部结构都能任意查看和使用,创建文件及编写python脚本都可以直接使用vs code编辑器进行编辑和调试,从而避免使用命令行及vim编辑文件,非常直观且方便~

4. RedHat认证-进程管理

4. RedHat认证-进程管理 1.进程概念 进程就是正在运行中的程序或者命令 每一个进程都是运行的实体,都有自己的地址空间,并占有一定的资源空间 程序消耗的是磁盘资源、进程消耗的是内存和CPU资源 进程会占用四类资源(CPU 、内存、磁盘、网…

python爬虫(一)之 抓取极氪网站汽车文章

极氪汽车文章爬虫 闲来没事,将极氪网站的汽车文章吃干抹尽,全部抓取到本地,还是有点小小的难度。不能抓取太快,太快容易被封禁IP,不过就算被封了问题也不大,大不了重启路由器,然后你的IP里面又…

i.MX 6ULL 裸机 IAR 环境安装

一. IAR 的安装请自行搜索 二. 使用最新版本的 IAR,需要修改 SDK 1. 在 SDK 的 core_ca7.h 加上 #include "intrinsics.h" /* IAR Intrinsics */ 2. debug 时需要修改每个工程下的 ddr_init.jlinkscript,参考链接 Solved: How to conn…

使用C语言实现杨氏矩阵并找出数字

前言 过了五一假期,咋们经过了一个假期的休息,要继续学习了,不能偷懒哦!! 今天让我们来看看如何在一个杨氏矩阵中找出自己想找到的数字。 首先,我们要了解一下杨氏矩阵到底是什么,如果一个矩阵中…

[redis] redis为什么快

1. Redis与Memcached的区别 两者都是非关系型内存键值数据库,现在公司一般都是用 Redis 来实现缓存,而且 Redis 自身也越来越强大了!Redis 与 Memcached 主要有以下不同: (1) memcached所有的值均是简单的字符串,red…

ACPWorkbench_for_BP10

一、菜单 文件菜单包含导入导出所有参数,导出flashbin文件和退出操作。文件菜单显示如下: Import Audio Settings:从音频配置文件中导入音频参数。 Export Audio Settings:将音频设置导出为音频配置文件。 Export Flash Binary Fi…

OpenNJet:下一代云原生应用引擎

OpenNJet:下一代云原生应用引擎 前言一、技术架构二、新增特性1. 透明流量劫持2. 熔断机制3. 遥测与故障注入 三、Ubuntu 发行版安装 OpentNJet1. 添加gpg 文件2. 添加APT 源3. 安装及启动4. 验证 总结 前言 OpenNJet,是一款基于强大的 NGINX 技术栈构建…

设置定位坐标+请按任意键继续

设置定位坐标 目的 在编程和游戏开发中,设置定位坐标的目的是为了确定对象在屏幕或游戏世界中的具体位置。坐标通常由一对数值表示,例如 (x, y),其中 x 表示水平位置,y 表示垂直位置。设置定位坐标的目的包括: 1. **精…

【JavaScript】数据类型转换

JavaScript 中的数据类型转换主要包括两种:隐式类型转换(Implicit Type Conversion)和显式类型转换(Explicit Type Conversion)。 1. 隐式类型转换(自动转换): js 是动态语言&…

CNN笔记详解

CNN(卷积神经网络) 计算机视觉,当你们听到这一概念的是否好奇计算机到底是怎样知道这个图片是什么的呢?为此提出了卷积神经网络,通过卷积神经网络,计算机就可以识别出图片中的特征,从而识别出图片中的物体。看到这里充…

XYCTF2024 RE ez unity 复现

dll依然有加壳 但是这次global-metadata.dat也加密了,原工具没办法用了,不过依然是可以修复的 a. 法一:frida-il2cpp-bridge 可以用frida-il2cpp-bridge GitHub - vfsfitvnm/frida-il2cpp-bridge: A Frida module to dump, trace or hijac…

深度剖析muduo网络库1.1---面试提问(阻塞、非阻塞、同步、异步)

在面试过程中,如果被问到关于IO的阻塞、非阻塞、同步、异步时,我们应该如何回答呢? 结合最近学习的课程,我作出了以下的总结,希望能与大家共同探讨! 先给出 陈硕大神原话:在处理IO的时候&…

存储故障后oracle报—ORA-01122/ORA-01207故障处理---惜分飞

客户存储异常,通过硬件恢复解决存储故障之后,oracle数据库无法正常启动(存储cache丢失),尝试recover数据库报ORA-00283 ORA-01122 ORA-01110 ORA-01207错误 以前处理过比较类似的存储故障case:又一起存储故障导致ORA-00333 ORA-00312恢复存储故障,强制拉库报ORA-600 kcbzib_kcr…

计算机毕设

随着社会和国家的重视,大学对于大学生毕业设计越来越重视。 做软件设计设计方面,前后端分离是必不可少的,代码管理工具,前后端接口测试是项目中必须要用到的工具。做大数据设计方面,主要是要用到爬虫进行数据爬取&…

(二)JSP教程——taglib指令

创建标签文件 首先创建一个Web项目,在webapp/WEB-INF目录下创建一个tags文件夹 在tags文件夹中创建一个oddNumberSum.tag文件,Tag文件时扩展名为.tag的文本文件,其结构和JSP文件非常相似,该文件的目录结构如图所示 创建Tag文件的…

Altium Designer——检查原理图库正确性并生成报告

一、方法: 1.打开原理图库: 2.点击菜单栏的报告选项: 3.选择器件规则检查: 根据需求勾选,一般都是全部勾选: 二、问题: 1.缺少封装会导致什么问题: 1.首先: 封装是…