计算机网络 网络安全------token

token简介

使用token之前:

在传统的web中,由于HTTP协议是无状态性的,它不会记住有哪些用户登录过,所以这时候人们用一个会话标识,即session id来区分每个访问。

浏览器第一次访问服务器会在服务器端生成一个session,有一个sessionid和它对应,tomcat生成的sessionid叫做jsessionid。这个session id是通过算法生成的随机数(tomcat的ManagerBase类提供创建sessionid的方法:随机数+时间+jvmid)客户端只保存sessionid到cookie中,而不会保存session,session保存在服务器内存中(当然也可以存在数据库中,但这样不可避免要承担读取数据库的消耗)。

但这就带来了许多问题

  • 随着访问量上升,因为服务器要保存所有访问的session,势必会带来性能上的问题。
  • 如果把session都存在一台服务器中,在多服务器下的集群场景时,就会造成刚刚在服务器A访问完,但新的请求被转发到服务器B,而服务器B是没有存他的session id的
  • 用户在访问时很容易受到CSRF(跨站请求伪造)的攻击

CSRF(跨站请求伪造):即攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、虚拟货币转账等。

面对这些问题,token就出世了。

token的用法:

token是通过对用户的信息进行加密处理获得的,一般放在请求头,在下一次请求时我们可以通过对比两次的 token 是否一致来判断是否是 CSRF 的伪造请求。

由于token是在请求头的,而不是像session id存在cookie中(在cookie中的话攻击者利用你的名义发请求,网站还是只验证你本地cookie的session id是否匹配,所以攻击者就能成功攻击),当攻击者想要利用你的身份发恶意请求时,由于他无法得知你请求头的token信息,所以无法伪造合法的请求。(相关如何预防csrf攻击

而在分布式的情况下,由于我们的服务器远远不止一台,每一次请求通过负载均衡服务器调度后,往往会访问到不同的服务器,这样就不能访问到之前的 Session数据,因此在分布式集群中需要一个公共的存储空间。

而使用 Session 存储、读取、校验 token 会有较大的复杂度与性能问题,所以一般通过对使用UserID、时间戳和随机数加密获得 token,而不是随机生成。

当请求来时只需要对其在进行一次计算就可以获得 token 了。这样就解除了服务端的负担,因为服务端现在要做的只是再生成 token,然后与请求头的进行比较而已

相关推荐:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值