概述
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笔记。
最后
以上就是追寻心情为你收集整理的cookie和session知识点什么是cookie?什么是session?窃取cookie的全部内容,希望文章能够帮你解决cookie和session知识点什么是cookie?什么是session?窃取cookie所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复