介绍一下cookie, session 和token的区别,cookie和session和token
一、饼干、会话、令牌简介# 这三者都解决了超文本传送协议协议无状态的问题会话编号会话令牌是在网络通信(通常通过HTTP)中用来标识会话(一系列相关的消息交换)的一段数据。在通信基础设施使用无状态协议(如HTTP)的情况下,会话标识符变得很有必要。例如,访问卖家网站的买家希望在虚拟购物车中收集一些商品,然后通过访问网站的结账页面来完成购物。这通常涉及到正在进行的通信,其中客户端请求几个网页,然后服务器将这些网页发送回客户端。在这种情况下,跟踪购物者购物车的当前状态至关重要,会话身份是实现这一目标的一种方式。
会话身份通常是在访问者第一次访问站点时授予的。它与用户编号的不同之处在于,会话通常是短暂的(它们在预设的不活动时间(可能是几分钟或几小时)后过期),并且在达到某个目标后可能会失效(例如,一旦买家完成了订单,他就不能使用同一个会话身份来添加更多商品)。
由于会话编号通常用于识别登录到网站的用户,因此攻击者可以利用它们劫持会话并获得潜在的权限。会话编号通常是一个长的随机生成的字符串,以减少通过强力搜索获得有效身份的可能性。许多服务器会对客户端进行额外的验证,以防攻击者获得会话身份证.只要攻击者不能从相同的地址连接到服务器,将会话身份锁定到客户端的互联网协议(Internet Protocol)地址是一种简单而有效的措施。
会话令牌是唯一的标识符,通常是由散列函数生成的散列形式,该散列函数被生成并从服务器发送到客户端以标识当前交互会话。客户端通常将令牌作为HTTP cookie存储和发送,和/或作为得到或邮政查询中的参数发送。使用会话令牌的原因是客户端只需处理标识符(一小段没有意义的数据,因此没有安全风险),所有会话数据都存储在与该标识符链接的服务器上(通常存储在数据库中,客户端不能直接访问该数据库)。会话编号有很多缺点,不足以满足开发者的需求。许多开发人员使用其他逻辑来标识会话
1.饼干机制甜饼干机制是采用在客户端保持状态的方案。甜饼干的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的饼干,如果某个甜饼干所声明的作用范围大于等于将要请求的资源所在的位置,则把该甜饼干附在请求资源的超文本传送协议请求头上发送给服务器。
甜饼干的内容主要包括:名字、值、过期时间、路径和域。路径与域一起构成甜饼干的作用范围。
若不设置过期时间,则表示这个甜饼干的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的甜饼干被称为会话饼干。会话甜饼干一般不存储在硬盘上而是保存在内存里。
若设置了过期时间,浏览器就会把cookie**保存在硬盘**上,关闭后再次打开浏览器,这些甜饼干仍然有效直到超过设定的过期时间。存储在硬盘上的甜饼干可以在不同的浏览器进程间共享,比如两个工业管理学(工业工程)窗口。而对于保存在内存里饼干,不同的浏览器有不同的处理方式。
2.会议机制会议机制是一种服务器端的机制。
当客户端向服务器发出请求时,服务器将检查请求是否包含会话ID。
如果不是,那么服务器将生成一个随机会话及其匹配的会话id,并将会话id返回给客户端。如果是,服务器将根据会话id在存储器中找到相应的会话。当浏览器禁止Cookie时,有两种方法可以继续向服务器发送会话id:
第一种:URL重写(常用),即直接在URL路径后面附加会话id。
第二种:表单隐藏字段,在隐藏表单中写入sid。
3.令牌机制令牌是用户的身份验证方法。最简单的token由:uid(用户的唯一标识)、time(当前时间的时间戳)、sign(签名,由Token的前几位salt通过hash算法压缩成一定长度的十六进制字符串,可以防止恶意第三方拼接Token请求服务器)。
使用基于令牌的认证方法,不需要在服务器中存储用户的登录记录。大致过程如下:
1.客户端请求使用用户名和密码登录。
2.服务器收到验证用户名和密码的请求。
3.验证成功后,服务器会颁发一个令牌并发送给客户端。
4.收到令牌后,客户端可以将其存储在Cookie或本地存储中。
5.每次客户端向服务器请求资源时,都需要携带服务器颁发的令牌。
6.服务器接收请求,然后验证客户端请求中携带的令牌。如果验证成功,它会将请求的数据返回给客户端。
二、cookie和session 1的区别。cookie数据存储在客户端,会话数据存储在服务器上。
2.饼干不太安全。其他人可以分析本地存储的cookies并欺骗它们。
出于安全原因,应该使用会话。
3.会话将在服务器上保存一段时间。当访问增加时,它将比较您的服务器的性能。
COOKIE应该用于降低服务器性能。
三、session和token的区别作为一个认证令牌,安全性要比session好,因为每个请求都有签名,这也可以防止拦截和重放攻击。
会话是一种HTTP存储机制,旨在为无状态HTTP提供一种持久机制。会话只是将用户信息存储在会话中。由于SID的不可预测性,暂时认为是安全的。这是一种认证手段。但是,如果您有一个用户的SID,您就拥有该用户的所有权利。SID不应与其他网站或第三方共享。
Token,如果是指OAuth令牌或者类似的机制,提供认证和授权。认证是针对用户的,授权是针对app的。目的是让一个App有权访问一个用户的信息。这里的令牌是唯一的。不能转给其他app或其他用户。
四。会话管理机制中的漏洞会话管理机制中有两种主要类型的漏洞:
1.会话令牌生成过程中的薄弱环节
2.处理会话令牌在整个生命周期中的薄弱环节。
5.生成过程中的薄弱环节。代币有一定的含义。有些会话令牌是直接从用户名或电子邮件地址转换而来的,或者是使用一些基本信息创建的。这使得构建令牌更加容易。
常见的有意义的令牌具有以下信息:
帐户用户名
应用程序用来区分帐户的数字标识符。
用户的姓氏/名字
电子邮件
日期/时间戳
增加/减少的数字
客户端的IP地址令牌也可能通过XOR、Base64、ASCII等进行编码。然后生成令牌。
2.令牌可预测性令牌可预测性主要由三个方面引起:隐含序列、时间依赖性、生成数随机性低。
寓意:主要原因是指令卡是简单排列,然后编码或十六进制加减得到的。只要猜出它的基本方法,就能发现其中的规律。
时间相关性:令牌只随时间变化,使得令牌产生不同的伪随机。
随机性不强:指令板是由一个简单的线性同余函数生成的,如果恰好是公共的,比如java的java.util.Random函数等。
不及物动词生活过程中的薄弱环节
1.在网络上泄漏令牌。当网站以未分类的方式传输会话令牌时,令牌很可能会被窃听。例如,未加密的HTTP用于通信。
需要注意的是,虽然有些网站的部分页面使用HTTPS,但也有部分页面使用HTTP,因此令牌很可能在这些HTTP通信页面中泄露。
2.日志中泄漏令牌的主要原因可能是应用程序使用URL查询字符串而不是HTTPCookie或POST请求作为令牌传输机制。比如在java web中,URL后面会跟http://xxx.com;jsessionid=xxx当这样的URL被写在日志或其他历史记录中时,就可以很容易地获得sid。
当Cookie被禁止时,很容易使用URL来传输令牌。
3.会话终止是脆弱的。在某些站点中,用户退出后,只通过set-Cookie等命令清除客户端的令牌,而不会删除服务器的令牌。也可能发生当用户退出时,应用程序不与服务器通信,导致服务器什么也不做。这些行为将导致用户在再次提交令牌时能够与服务器通信。
4.客户端面临令牌劫持的风险。攻击者可以通过XSS攻击用户,获取用户的Cookie,并获得令牌。所以注意在cookie中设置HTTPOnly,可以减缓XSS攻击。
1个参考
2参考
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。