您好,欢迎访问老男孩IT教育在线教育有限公司!

400-609-2893

全国咨询热线

您现在所在位置:主页 > 通知资讯 >

Cookie、Session、Token技术学习 网络安全必备技能

更新时间:2020-10-23

  Cookie技术:

  Cookie是一种在客户端保持HTTP状态信息的技术,Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端浏览器的数据是可以各不相同的。一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制4KB。
 

  Cookie功能特点:

  存储于浏览器头部/传输于HTTP头部

  写时带属性,读时无属性

  HTTP头中Cookie:user=bob;cart=books;

  属性name/value/expire/domain/path/httponly/secure/…

  由三元组[name,domain,path]唯一确定cookie
 

  Cookie的安全属性:

  secure属性

  当设置为true时,表示创建的Cookie会被以安全的形式向服务器传输,也就是只能在HTTPS连接中被浏览器传递到服务器端进行会话验证,如果是HTTP连接则不会传递该信息,所以不会被窃取到Cookie的具体内容。

  HttpOnly属性

  如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。

  secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,HttpOnly属性的目的是防止程序获取cookie后进行攻击。这两个属性并不能解决cookie在本机出现的信息泄漏的问题(FireFox的插件FireBug能直接看到cookie的相关信息)。
 

  Session技术:

  使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度。Session技术是一种将会话状态保存在服务器端的技术,它可以比喻成是医院发放给病人的病历卡和医院为每个病人保留的病历档案的结合方式。客户端需要接收、记忆和回送Session的会话标识号,Session可以且通常是借助Cookie来传递会话标识号。
 

  Session的跟踪机制:

  Servlet API规范中定义了一个HttpSession接口,HttpSession接口定义了各种管理和操作会话状态的方法。HttpSession对象是保持会话状态信息的存储结构,一个客户端在WEB服务器端对应一个各自的HttpSession对象。WEB服务器并不会在客户端开始访问它时就创建HttpSession对象,只有客户端访问某个能与客户端开启会话的Servlet程序时,WEB应用程序才会创建一个与该客户端对应的HttpSession对象。WEB服务器为HttpSession对象分配一个独一无二的会话标识号,然后在响应消息中将这个会话标识号传递给客户端。客户端需要记住会话标识号,并在后续的每次访问请求中都把这个会话标识号传送给WEB服务器,WEB服务器端程序依据回传的会话标识号就知道这次请求是哪个客户端发出的,从而选择与之对应的HttpSession对象。WEB应用程序创建了与某个客户端对应的HttpSession对象后,只要没有超出一个限定的空闲时间段,HttpSession对象就驻留在WEB服务器内存之中,该客户端此后访问任意的Servlet程序时,它们都使用与客户端对应的那个已存在的HttpSession对象。HttpSession接口中专门定义了一个setAttribute方法来将对象存储到HttpSession对象中,还定义了一getAttribute方法来检索存储在HttpSession对象中的对象,存储进HttpSession对象中的对象可以被属于同一个会话的各个请求的处理程序共享。

  利用Cookie实现Session跟踪:

  如果WEB服务器处理某个访问请求时创建了新的HttpSession对象,它将把会话标识号作为一个Cookie项加入到响应消息中,通常情况下,浏览器在随后发出的访问请求中又将会话标识号以Cookie的形式回传给WEB服务器。

  WEB服务器端程序依据回传的会话标识号就知道以前已经为该客户端创建了HttpSession对象,不必再为该客户端创建新的HttpSession对象,而是直接使用与该会话标识号匹配的HttpSession对象,通过这种方式就实现了对同一个客户端的会话状态的跟踪。
 

  session原理:

  1、session是保存在服务器端,理论上是没有是没有限制,只要你的内存够大

  2、浏览器第一次访问服务器时会创建一个session对象并返回一个JSESSIONID=ID的值,

  创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie写回浏览器

  3、浏览器在第二次访问服务器的时候携带Cookie信息JSESSIONID=ID的值,如果该JSESSIONID的session已经销毁,

  那么会重新创建一个新的session再返回一个新的JSESSIONID通过Cookie返回到浏览器

  4、针对一个web项目,一个浏览器是共享一个session,就算有两个web项目部署在同一个服务器上,针对两个项目的session是不同的

  如:你在tomcat上同时部署了两个web项目,分别是web1、web2。当你在一个浏览器上同时访问web1时创建的session是A1,访问web2时创建的session是A2。后面你再多次访问web1使用的session还是A1,多次访问web2时使用session就是A2

  5、session是基于Cookie技术实现,重启浏览器后再次访问原有的连接依然会创建一个新的session,

  因为Cookie在关闭浏览器后就会消失,但是原来服务器的Session还在,只有等到了销毁的时间会自动销毁

  6、如果浏览器端禁用了Cookie,那么每次访问都会创建一个新的Session,但是我们可以通过服务器端程序重写URL即可,如果页面多连接多,会增加不必要的工作量,那可以强制让你用户开启接收Cookie后再让其访问即可。

  大白话:当你一次访问服务器的时候,服务器会在内存中开辟一块空间,返回唯一一把打开该空间的钥匙,再把这把钥匙返回到浏览器。当你第二次访问的时候浏览器会携带这把钥匙到服务器端打开对应的空间,如果该空间已经销毁又重新返回开辟一块新的空间返回新的钥匙到浏览器。

网络安全培训班哪里好?

  Token技术:

  Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

  Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

  使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
 

  Token的验证原理:

  基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中。这种概念解决了在服务端存储信息时的许多问题NoSession意味着你的程序可以根据需要去增减机器,而不用去担心用户是否登录。

  基于Token的身份验证的过程如下:

  1.用户通过用户名和密码发送请求。

  2.程序验证。

  3.程序返回一个签名的token给客户端。

  4.客户端储存token,并且每次用于每次发送请求。

  5.服务端验证token并返回数据。

  Tokens的优势:

  1.无状态、可扩展

  2.安全

  3.多平台跨域
 

  Cookie和Session的不同:

  cookie数据存放在客户的浏览器上,session数据放在服务器上。

  cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

  session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。

  单个cookie在客户端的限制是4K,很多浏览器都限制一个站点最多保存20个cookie。

  所以个人建议:将登陆信息等重要信息存放为SESSION其他信息如果需要保留,可以放在COOKIE中。
 

  Token和cookie的区别:

  token和cookie一样都是首次登陆时,由服务器下发,都是当交互时进行验证的功能,作用都是为无状态的HTTP提供的持久机制。

  token存在哪儿都行,localstorage或者cookie。③:token和cookie举例,token就是说你告诉我你是谁就可以。

  对于token而言,服务器不需要去查看你是谁,不需要保存你的会话。当用户logout的时候cookie和服务器的session都会注销;但是当logout时候token只是注销浏览器信息,不查库。

  token优势在于,token由于服务器端不存储会话,所以可扩展性强,token还可用于APP中。
 

  总结:

  Token完全由应用管理,所以它可以避开同源策略

  Token可以避免CSRF攻击

  Token可以是无状态的,可以在多个服务间共享

  session与token的区别:

  session和oauth token并不矛盾,作为身份认证

  token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全了。如上所说,如果你需要实现有状态的会话,仍然可以增加session来在服务器端保存一些状态。

  App通常用restfulapi跟server打交道。Rest是stateless的,也就是app不需要像browser那样用cookie来保存session,因此用sessiontoken来标示自己就够了,session/state由api server的逻辑处理。如果你的后端不是stateless的restapi,那么你可能需要在app里保存session.可以在app里嵌入webkit,用一个隐藏的browser来管理cookiesession.

  Session是一种HTTP存储机制,目的是为无状态的HTTP提供的持久机制。所谓Session认证只是简单的把User信息存储到Session里,因为SID的不可预测性,暂且认为是安全的。这是一种认证手段。而Token,如果指的是OAuth Token或类似的机制的话,提供的是认证和授权,认证是针对用户,授权是针对App。其目的是让某App有权利访问某用户的信息。这里的Token是唯一的。不可以转移到其它App上,也不可以转到其它用户上。转过来说Session。Session只提供一种简单的认证,即有此SID,即认为有此User的全部权利。是需要严格保密的,这个数据应该只保存在站方,不应该共享给其它网站或者第三方App。所以简单来说,如果你的用户数据可能需要和第三方共享,或者允许第三方调用API接口,用Token。如果永远只是自己的网站,自己的App,用什么就无所谓了。
 

  原文链接:https://www.jianshu.com/p/3cbe42a3be69

在线客服

ONLINE SERVICE

联系电话

400-609-2893

返回顶部