04 基础篇-COOKIE

cookie

Cookie 是一些数据, 存储于你电脑上的文本文件中。
当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用 户的信息。
Cookie 的作用就是用于解决 "如何记录客户端的用户信息":

  • 当用户访问 web 页面时,他的名字可以记录在 cookie 中。
  • 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。

1、cookie的分类

  • 由服务器返回的cookie---Set-cookie

    这一类Cookie是由服务端产生的,再发送给客户端保存,用的时候我们直接拿来用就行了。
    它的本来面貌是这样子的:

    Set-Cookie: t7asq_4ad6_saltkey=e4CjZ008; expires=Sat, 18-Jan-2020  06:45:05 GMT; path=/; domain=.discuz.net; httponly
    Set-Cookie: t7asq_4ad6_lastvisit=1576734305; expires=Sat, 18-Jan-2020 06:45:05 GMT; path=/; domain=.discuz.net
    Set-Cookie: t7asq_4ad6_lastact=1576737905%09member.php%09logging; expires=Fri, 20-Dec-2019 06:45:05 GMT; path=/;
    Set-Cookie: domain=.discuz.net
    

    经过格式化后变成抓包时我们看到的样子:


    Set-cookie.png
  • 由JavaScript生成的cookie

JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。
JavaScript 中,创建 cookie 如下所示:

document.cookie="username=John Doe";

这一类由JavaScript生成的cookie,需要我们自己去js文件里分析查找它的算法,所以document.cookie这个要记住,因为它是你查找cookie生成算法时要用到的。

2、cookie的作用

  • 识别身份(验证码)

服务器需要通过一段cookie来判断这个验证码是不是你这个链接相对应的,举个简单的例子:
post登录正方教务系统,在登录地址http://jwxt.njupt.edu.cn/
获取得cookie:Set-Cookie: ASP.NET_SessionId=2jmvmp34jiaaf0id0zkvbl55; path=/ WEB=20111152; path=/
在获取验证码时,你要将ASP.NET_SessionId=2jmvmp34jiaaf0id0zkvbl55; WEB=20111152提交上去,否则取到的验证码就不是ASP.NET_SessionId=2jmvmp34jiaaf0id0zkvbl55; path=/ WEB=20111152; path=/对应的验证码,登录时会显示验证码错误

  • 判断是否访问过某些请求
    不同的页面,有些cookie事不一样的
  • 判断是否登录状态

    你登录后,服务器会返回一个登录成功后的cookie,这个cookie可以用于访问需要这个网页登录才能操作的页面。
    以正方教务系统为例,我们需要输入账号密码验证码登录后才能访问主页,其实也可以通过登录后获取到的cookie直接访问主页,当然,cookie必须是还没失效:


    cookie访问主页.png

3、cookie的结构

以这段为例,分析cookie的结构

Set-Cookie: t7asq_4ad6_saltkey=e4CjZ008; expires=Sat, 18-Jan-2020 06:45:05 GMT; path=/; domain=.discuz.net; httponly

  • t7asq_4ad6_saltkey=e4CjZ008cookie的值,其中- t7asq_4ad6_saltkey为字段名,e4CjZ008为字段名的值,用=隔开
  • ;分隔作用,分号+空格,最后一个后面不用加
  • expires=Sat, 18-Jan-2020 06:45:05 GMTcookie的有效期
  • path=/作用的路径
  • domain=.discuz.net作用的域名,表明该cookie只在这个域名中可用
  • httponlyCookie访问控制,当是httponly,可以防止程序获取cookie,当是secure,可防止信息在传递的过程中被监听捕获后导致信息泄露

4、cookie合并更新

当你访问登录地址时,获取到一个cookie,当你访问验证码地址时又获取到了一个cookie,两个cookie里有的字段名可能是相同的,但值不同,这时,旧的值旧只能被放弃掉。
用一个例子来解释比较清晰:
当访问登录地址https://www.discuz.net/member.php?mod=logging&action=login时,得到如下cookie

t7asq_4ad6_saltkey=HE4WI3X7; t7asq_4ad6_lastvisit=1576741783; t7asq_4ad6_lastact=1576745383%09member.php%09logging;

当访问验证码地址https://www.discuz.net/misc.php?mod=seccode&update=66282&idhash=cS时,得到如下cookie

t7asq_4ad6_lastact=1576745383%09misc.php%09seccode; t7asq_4ad6_seccode=3206933.345443c1459be8981e

可以看出,后者t7asq_4ad6_lastact字段的值变了,且多出来t7asq_4ad6_seccode=3206933.345443c1459be8981e
那么就需要将两个cookie进行合并更新了

1. 对比新的cookie 去除无效cookie

本次合并的cookie中没有需要剔除的无效cookie

2.在新的cookie里面寻找是否存在旧cookie里的名字,存在就用新的cookie替换掉旧的

刚刚找出t7asq_4ad6_lastact字段的值变了,所以用新的t7asq_4ad6_lastact字段的值去替换旧的值,替换后两个cookie

t7asq_4ad6_saltkey=HE4WI3X7; t7asq_4ad6_lastvisit=1576741783; t7asq_4ad6_lastact=1576745383%09misc.php%09seccode;

t7asq_4ad6_seccode=3206933.345443c1459be8981e

3.合并两个cookie
将两个cookie合并起来,得到

t7asq_4ad6_saltkey=HE4WI3X7; t7asq_4ad6_lastvisit=1576741783; t7asq_4ad6_lastact=1576745383%09misc.php%09seccode;
t7asq_4ad6_seccode=3206933.345443c1459be8981e

这就是登陆的cookie了

5、抓包流程(论清除cookie的重要性)

抓包时记得清除cookie,不然有些cookie存在的时候,服务器跟js是不会再生成这些cookie的,这会给抓包分析带来干扰

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTTP cookies,通常称之为“cookie”,已经存在很长时间了,但是仍然没有被充分理解。首要问题是存在许...
    NoFacePeace阅读 478评论 0 1
  • 作者:晚晴幽草轩www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饥人谷_Dylan阅读 1,231评论 0 51
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,381评论 1 17
  • 本周关键字:家庭陪伴 九十天目标检视:九十天相约 1,断舍离,建立空间力及信息力。 2,建立阅读好习惯:快速阅读一...
    叶子佟阅读 236评论 0 0
  • 我坐在树下 读书 太阳晒着我的背 很暖 头发很烫 心中充满阳光 风吹来一片树叶 落在我的书上 我轻轻合上书本 夹起...
    红玫瑰和白汽球阅读 187评论 0 0