本文主要是介绍[BT]小迪安全2023学习笔记(第21天:Web攻防-JWT),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第21天
JSON Web Token(JWT)
JWT是一种紧凑且自包含的方式,用于在网络上安全地传输信息作为JSON对象。这些信息可以被验证和信任,因为它们是数字签名的。JWT通常用于身份验证和信息交换,下面是一个简化的JWT示例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBCbG9nZ3MiLCJpYXQiOjE1MTYyMzkwMjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
这个示例可以分为三个部分,由两个点(.
)分隔:
-
Header(头部): 描述JWT的元数据,比如使用的算法(例如:HS256)。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
解码后的内容是:
{"alg": "HS256","typ": "JWT" }
-
Payload(载荷): 包含所要传递的数据,它可以包含多个预定义的声明或我们添加的自定义声明。
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBCbG9nZ3MiLCJpYXQiOjE1MTYyMzkwMjJ9
解码后的内容是:
{"sub": "1234567890","name": "Joe Blogs","iat": 1516239022 }
-
Signature(签名): 通过将前两部分的编码字符串用密钥进行签名生成,以验证消息的发送者和确保消息在传输过程中未被篡改。
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
生成JWT的过程包括对header和payload进行Base64编码,然后使用header中指定的算法和密钥对它们进行签名。JWT的这种结构使得它在Web环境中特别有用,可以在客户端和服务器之间轻松安全地传递信息。
第一种攻击方式
如果将alg设置为None,即为对数据不进行加密,因此数据极有可能被攻击者随意篡改。但如果JWT采用了加密算法,那么修改数据之后会因为加密的原因无效
第二种攻击方式
由于一般情况下JWT都会采用加密,因此还可以通过爆破的方式获得密钥,密钥位于Signature部分,如果获得了密钥,那么再修改数据就会有效
第三种攻击方式
有的时候密钥不是固定的写在代码里,而是通过KID设置的路径名读取密钥文件,而这个时候可以通过设置KID的值读取其他文件或者执行命令
不安全的第三方组件
在搭建网站时可能会用到第三方组件或库,而如果攻击者知道了这些组件的漏洞那么就可以利用起来攻击网站,比如log4j
这篇关于[BT]小迪安全2023学习笔记(第21天:Web攻防-JWT)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!