网络安全之身份验证:Cookie、Session、Token解析

背景

现代化的网站已经不再是简单的静态网站了,会包含很多动态的内容,例如推荐、用户的信息查询、购物车等功能,因此后端服务器需要得到每个请求的身份及状态信息。然而HTTP协议是无状态的协议,每个请求之间是独立的,为了在请求的过程中进行状态保存,避免每次都进行登录校验,因此需要在客户端或浏览器保存用户的身份及状态信息,并在请求中发送,以实现有状态的服务。

技术

Cookie

cookie是在用户计算机中保存数据的技术,通常是浏览器在使用。cookie的常见应用是记录用户的身份和状态信息,最常用于身份验证。Cookie的使用通常有会话管理、个性化、网站追踪等。对于用户打开网站,网站向客户端发送包含唯一会话标识符的cookie,当用户登录时,服务器会记住该会话标识符已通过身份验证,并授予用户对其服务的访问权限。而即使用户不登录网站,在用户后续的访问中,网站仍然可以记录该cookie及其与用户访问的联系,以实现对用户的分析和个性化等功能。Cookie的安全性问题通常取决于2个因素:

1.网站和用户的Web浏览器安全性;
2.Cookie数据是否已加密。

以下是Cookie存在的风险:

1.网络监听网站浏览可以被发送方和接收方以外的网络上的计算机截取,如果此浏览是未加密的,攻击者即可读取Cookie以及对话的全部内容,并利用Cookie执行恶意操作。2.虚假子域:DNS缓存中毒如果攻击者攻击了DNS服务器缓存的DNS条目,这可能使得攻击者能够访问用户的Cookie。例如,攻击者可以创建f123.www.example.com 的虚假DNS条目,且指向攻击者服务器的IP地址,然后当受害者访问了f123.www.example.com 下的内容时,就会将与example.com相关的cookie提交给攻击者的服务器。3.跨站点脚本:Cookie盗窃 跨站点脚本:在网站上注入恶意代码。 利用跨站点脚本,攻击者可以使受害者的cookie发送到攻击者控制的网站。4.跨站点脚本:代理请求 在旧版本的浏览器中,使用XMLHttpRequest发送时,可以指定将获得答复的代理服务器,这样攻击者就可以向攻击者服务器以及正常服务器发送请求,由于该请求是针对正常服务器的且会通过攻击者服务器进行路由,因此攻击者代理服务器就能获得受害者的Cookie。5.跨站请求伪造 类似跨站点脚本,将请求发送到正常服务器上执行攻击操作,例如银行转账,由于cookie会被同时发送,因此会在用户未批准的情况下交易。6.Cookie劫持 Cookie劫持是一种黑客形式,攻击者可以利用它来访问Internet Explorer用户的会话Cookie。它使攻击者可以通过诱骗用户在屏幕上拖动对象来从任何站点获取cookie,从而获得用户名和密码。Session

Session技术也是基于Cookie的,当用户登录服务器后,服务器会为用户创建会话,并将会话id存储在用户浏览器的cookie中。当用户保持登录状态时,在每个后续请求中,cookie都会一起发送,由此,服务器可以利用该会话id校验用户的身份。

Token

许多应用程序使用JSON Web Token(JWT)来进行身份验证。Session是保存在服务器的,而Token是在客户端保存的。 下面这个图是JWT的交互示意图:

JWT通常是用于用户授权的,一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由、服务和资源。单一登录是当今JWT广泛使用的一项功能,因为开销小且可以在不同的域中轻松使用。JWT还是在互联网上各方之间交换信息的一种好方法,因为可以对JWT进行签名,以确保发件人的可信性,并验证内容是否被篡改。

JWT结构

JWT是由三个部分组成的,每个部分之间是通过点(.)来连接的:

  • Header
  • Payload
  • Signature

因此,典型的JWT的形式如下: xxxxx.yyyyy.zzzz

  • Header典型的头部是由两个部分组成的:令牌类型(JWT)、以及所使用的签名算法(HMAC、SHA256或RSA): { “alg”: “HS256”, “typ”: “JWT” } 接着,这个部分会使用Base64Url编码后作为JWT的第一个部分。* Payload第二个部分是载荷,包含着声明,声明是有关实体和附加数据的。声明有三种类型:* * 已注册声明:非强制但建议使用的预定义声明,例如iss(发布者),exp(到期时间),sub(主题),aud(受众)和其他。
    • 公开声明:JWT的用户定义的声明,当应尽量避免冲突,在IANA JSON Web令牌注册表中定义它们,或将其定义为包含抗冲突名称空间的URI。
    • 私人声明:这些是为在同意使用它们的各方之间共享信息而创建的自定义声明,既不是注册声明也不是公共声明。
{"sub": "1234567890","name": "John Doe","admin": true
} 

同样的,Payload会使用Base64Url编码后作为JWT的第二个部分。

  • Signature 要创建签名部分,您必须获取编码的标头,编码的有效负载,机密,标头中指定的算法,并对其进行签名。例如,如果要使用HMAC SHA256算法,则将通过以下方式创建签名:
HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret) 

签名用于验证消息在此过程中没有更改,并且对于使用私钥进行签名的令牌,它还可以验证JWT的发送者是它所说的真实身份。

  • 组合最后,将上面的三个部分进行组合(将header和payload进行编码,并使用secret签名)可以得到JWT:

## 最后
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

扫码领取

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值