【渗透测试】(番外2)session与cookie生命周期

我们先来了解一下session和cookie怎么来的?考虑这样一个问题:

Q1:如何抓取一个访问受限的网页?如新浪微博好友的主页,个人微博页面等。


A1:我们可以手动输入用户名和密码来访问页面

而所谓的“抓取”,其实就是使用程序来模拟完成同样的工作

因此我们需要了解“登陆”过程中到底发生了什么。


  1. 当用户来到微博登陆
  2. 输入用户名和密码之后点击“登录”
  3. 浏览器将认证信息POST给远端的服务器
  4. 服务器执行验证逻辑,如果验证通过
  5. 浏览器会跳转到登录用户的微博首页

Q2:在登录成功后,服务器如何验证我们对其他受限制页面的访问呢?


A2:因为HTTP协议是无状态的,所以很显然服务器不可能知道我们已经在上一次的HTTP请求中通过了验证。



  • 当然,最简单的解决方案就是所有的请求里面都带上用户名和密码,这样虽然可行,但大大加重了服务器的负担(对于每个request都需要到数据库验证
  • 也大大降低了用户体验(每个页面都需要重新输入用户名密码,每个页面都带有登录表单)。
  • 既然直接在请求中带上用户名与密码不可行,那么就只有在服务器或客户端保存一些类似的可以代表身份的信息了,所以就有了cookie与session

cookie的生命周期:

cookie,简而言之就是在本地计算机保存一些用户操作的历史信息(当然包括登录信息),并在用户再次访问该站点时浏览器通过HTTP协议将本地cookie内容发送给服务器,从而完成验证,或继续上一步操作。

session的生命周期:

session,简而言之就是在服务器上保存用户操作的历史信息。服务器使用session id来标识session,session id由服务器负责产生,保证随机性与唯一性,相当于一个随机密钥,避免在握手或传输中暴露用户真实密码。但该方式下,仍然需要将发送请求的客户端与session进行对应,所以可以借助cookie机制来获取客户端的标识(即session id),也可以通过GET方式将id提交给服务器。




cookie是有时间限制的,根据生命期不同分成两种:会话cookie和持久cookie;

会话cookie:


生命期为浏览会话期的cookie。如果不设置过期时间,则表示这个cookie生命周期为从创建到浏览器关闭止,只要关闭浏览器窗口,cookie就消失了。会话cookie一般不保存在硬盘上而是保存在内存里。


持久cookie:


如果设置了过期时间(setMaxAge(606024)),浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。   


程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识(session id),如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数)。如果客户请求不包含session id,则为此客户创建一个session并且同时生成一个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。



参考:

https://mp.weixin.qq.com/s/HQqBfdjkbuNb8ThqIwY4bw

猜你喜欢

转载自blog.csdn.net/qq471011042/article/details/80281000