cookie和session知识点

HTTP协议的特点

  • 请求应答模式
  • 灵活可拓展
  • 可靠传输
  • 无状态
    我们将从无状态这一特点来引出cookie

无状态的影响

现实:每个请求都是独立的
需求:保持会话
就像在银行办理业务时,每个业务之间不需要再重复报出自己的卡号一样,系统会记住你的卡号。这就相当于cookie再其中起到的作用。

什么是cookie?

首先,我们应该知道很多网站都存在记住密码的功能,这就与cookie的存在有关。
就好比说在公共浴室每个客人都会有专属的号码牌存取衣物,在浏览网站时,每个用户也会有专属的cookie值。
在这里插入图片描述

cookie的内容

key/value 格式
eg:
name=yy
id=99
islogin=1

cookie的格式

Set-cookie:第一次访问,服务器响应给服务器
cookie:之后的访问,客户端发给服务器
我们先把浏览器中的历史记录全部删去:
在这里插入图片描述

实操

我们可以在响应头中发现,此时已下发cookie
在这里插入图片描述
下面我们来仔细观察一下这五个cookie:
在这里插入图片描述
当我们再一次打开百度时,会发现请求头中多了一个cookie值:
在这里插入图片描述

set-cookie的格式:

  • name=value cookie的键值对(每个cookie都有
  • expires cookie的过期时间
  • max-age cookie多久过期,单位是秒(优先级大于expires)
  • domain cookie对哪个域名生效(在这里,cookie对百度下任何一个子域名都生效)
  • path cookie匹配的路径(在这里path=/代表百度下的任何一条子路径都可以被使用)
  • secure 只有通过https连接,才发送cookie到服务器
  • httponly 不允许通过脚本document.cookie去更改这个值

cookie的保存

如果,cookie中没有expires这一参数,那么就代表关掉这一网页cookie便会消失,所以cookie这时保存在内存中;
如果cookie存在expires这一参数,就代表着关闭网页cookie依旧存在,这时,cookie保存在磁盘中。

cookie的特点

  • 明文

  • 可修改
    在这里插入图片描述

  • 大小受限(视浏览器而定)

cookie的用途

  • 记住登录状态
  • 跟踪用户行为
    就相当于我们购物时,总会刷到相似的物品,这也是基于cookie的作用

什么是session?

基于刚刚所说的cookie,session和cookie有类似之处。
举个例子,当我们在同一个医院二次就医时,我们只需要报出上一次就医时的编号,一声就可以了解你的大致症状,因为这些症状早已保存在医院系统中,在这种情况下,我们报出的编号就相当于cookie(储存在客户端)而医生了解到的你的症状,就相当于session(储存在服务端)

session的定义

session_start();
//开启会话,产生session_id
if(($username=='')||($password==''))
//如果用户名与密码任意一项为空,登录失败
else if(($username=='username')&&($password=='password'))
//登录成功
$_SESSION['username']=$username;
$_SESSION['islogin']=1;
//将信息保存在session中
session_destory();
//session的销毁

session的存储

session储存在服务端的文件中,一旦被销毁,文件也不复存在

session与cookie的关系

有了session,并不意味着我们可以代替cookie,我们依旧需要cookie内容中的SEESSID下发到服务端,并通过其来识别用户身份

窃取cookie

当我们在一个网站中进行了登录,cookie中会形成一个SESSID,我们将这个SESSID复制出来,然后在另一个浏览器中,将其中的SESSID换为我们刚刚的SESSID,就会在没有用户名没有密码的情况下完成登录

Cookie-Editor

这时有一个疑问,如果这个网站的cookie不止一个,我们应该如何操作呢,这时我们就需要一个插件:
在这里插入图片描述
这个插件可以帮助我们来解决这个问题
首先,我们点击Export就可以将cookie导出在这里插入图片描述
我们新建一个文本文档,将其复制到里面,就可以看到该网站的cookie已被我们窃取:
在这里插入图片描述
然后我们打开另一个浏览器,用同样的插件,进行导入:
在这里插入图片描述
在这里插入图片描述
点击import即可
思考:那如果在有金钱交易的网络平台上,我们窃取了别人的cookie,将别人的钱转入自己账户,那么后果是不堪设想的。
已知用户的cookie是保存在本地的电脑上的,我们也不可能跑到别人家去看别人的cookie然后再进行操作,所以我们如何远程拿到别人的cookie呢?

前端知识:Java Script语法

  • 获取cookie
    document.cookie;
    在这里插入图片描述
    我们在任意网站点击f12,在控制台中输入document.cookie,就会显示cookie值,再进一步,我们可以用alert来进行弹窗,alert(document.cookie);就可以弹出我们的cookie

  • 设置cookie
    document.cookie=“username=Minty”;
    在这里插入图片描述

  • 修改cookie
    在Java Script中,没有专门修改cookie的语法,若想修改,就直接像设置cookie一样 document.cookie=“username=abc”;重覆盖即可完成修改

  • 删除cookie
    同样的,也没有删除cookie的语法,我们只需要将cookie中某一属性的过期时间改为后一秒或以前的时间即可完成删除
    所以,如果我们能够远程执行这样的脚本代码,那我们就可以远程获取到本人的cookie值

如何将Java Script的脚本插入网页

下面我来演示一个案例:最基础的XSS
GET传参(需要从url入手):
在这里插入图片描述
我们首先主要来查看一下源代码:
在这里插入图片描述
主要来查看一下PHP代码,可以看出,通过GET传参,输出用户名,所以我们就可以在这上面做文章。
这里我们可以直接在上方的url进行操作,也可以借助hackbar操作,将name后改为name=<script>alert(1)</script>就可以触发弹窗
在这里插入图片描述
这里的弹窗为什么不是1呢?我们将源代码中的这几行代码注释掉再来看一下:
在这里插入图片描述
结果就能弹出1:
在这里插入图片描述
如果这时候存在cookie值的话,我们就在alert(document.cookie)就会弹出cookie。
POST传参(从输入框入手)
大致步骤与GET传参一致,主要还是靠具体的PHP代码分析
通过这一些cookie和session知识,我们的目的就是要推导出第一种漏洞–XSS漏洞
正如我们前面所说的,XSS是一种跨站的脚本攻击,有兴趣的话,可以查看我的下一篇博客–XSS笔记。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值