理解Cookie和Session机制,及其安全问题
大家常说"Cookie保存在客户端而Session保存在服务端",很多人看了有疑惑,明明Session就在Cookie中啊,为什么这么说?二者到底有啥区别?
一、Cookie
首先分清Cookies和Cookie
Cookies严格来说是个存储空间,是个载体,用提交持久化的信息,浏览器发送HTTP请求时会自动带上此域的所有Cookie,抓包能发现就在HTTP Header中
Cookie就是存储在Cookies中的一条条数据
但当我们说Cookie和Session的区别时,这里的Cookie就变成了一种和Session一样的机制,用来比较
网站设计时,服务端可能每次收到请求都需要知道客户端的某种信息,比如用户登录时间,这种信息又不足以重要到需要保存在服务端,那么可以借助Cookie
数据在服务端生成,生成后通过Set-Cookie发送给客户端后,服务端自身不保存,当客户端再次有请求时,服务端可以从请求的HTTP Header中调出这个数据
这能解释"Cookie保存在客户端"了
二、Session
Session是身份认证的凭证,用户登录后,服务器分发一个凭证,以后用户再请求带上这个凭证就能明确身份,不用每次都用账号密码来证明身份
这么重要的数据当然得保存在服务端,且以服务端的为准。但客户端也得保存,才能在登录周期中每次请求都带上
"每次请求都带上"这显然就和Cookie一样,所以就有很多开发者把Session放在Cookie里,不用自己写前端代码把Session塞进请求里,浏览器自己会带上
但Session和Cookie真的一样么?当然不,这样设计会带来安全问题。
三、Session Cookie混用带来的安全问题
目前的浏览器有以下空间供网站使用
Cookie:持久保存,大小限制4kb,最多放20个,每次请求都会带上所有Cookie
Session Storage:关闭标签后失效,请求不会主动带上
Local Storage:持久保存,请求不会主动带上
我们再来看几个Web的安全漏洞
XSS,跨站脚本攻击。攻击者获得页面的js权限,能操作页面的一切,包括Session Storage和未设置HTTP Only属性的Cookie
CSRF,跨站请求伪造,就是钓鱼网站,在网站A,发送一个向网站B的请求,由于浏览器会在请求中加上此域的Cookie,所以如果在浏览器登录了网站B,又打开了钓鱼网站A,网站A构造的前往网站B的请求就会带上你的Cookie,如果Cookie中有用户凭证,服务器认为你是登录用户,请求就会被响应。比如点赞、关注、发色情广告等请求
防御XSS,把关机Cookie设置HTTP Only属性即可,js无权访问
而防御CSRF,推荐使用token机制,服务器颁发token,按规范来说推荐存储在Session Storage中(也可以放cookie中,由于浏览器的同源策略,网站A无法访问网站B的cookie),js将其添加到请求的参数或Header中
以上两个措施,都需要做到,才能防护这两个攻击。
另外博主以为,服务器校验referer Header也是能防御CSRF的
四、错误示范
把用户登录凭证放在Cookie中,未设置HTTP Only,请求中无token参数/Header
容易遭受XSS、CSRF攻击
把用户登录凭证放在Cookie中,设置了HTTP Only,请求中无token参数/Header
容易遭受CSRF攻击,成功防御XSS攻击
把用户登录凭证放在Cookie中,未设置HTTP Only,请求中有token参数/Header(前端把token保存在Session Storage,保存在Cookies,未设置HTTP Only)
容易遭受XSS攻击,攻击者能构造请求,把token拼上,成功防御CSRF攻击
把用户登录凭证放在Cookie中,设置了HTTP Only,请求中有token参数/Header【规范防御】
成功防御XSS、CSRF攻击
把用户登录凭证放在Cookie中,未设置HTTP Only,请求中有token参数/Header(前端把token保存在保存在Cookies,设置了HTTP Only)【稀里糊涂地防御】
成功防御XSS、CSRF攻击
把用户登录凭证放在Cookie中,设置了HTTP Only,且请求参数/Header中也添加并校验此凭证【极简防御一】
一个凭证同时防御XSS、CSRF攻击,虽然看起来不正道,不正经
把用户登录凭证放在Cookie中,设置了HTTP Only,且服务器校验referer Header【极简防御二】
一个凭证同时防御XSS、CSRF攻击,浏览器js目前似乎无法修改请求的referer头
五、最后
现在浏览器的安全也逐步做上来了,一定程度上能防御CSRF
以上,讲得不对望指正
理解Cookie和Session机制,及其安全问题的更多相关文章
- 转:理解Cookie和Session机制
原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...
- 理解Cookie和Session机制
转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...
- 深入理解Cookie和Session机制
转载理解Cookie和Session机制 目录 Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Coo ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- 【转】理解cookie和session机制
cookie和session机制之间的区别与联系 具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就 ...
- 正确理解cookie和session机制原理
php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧. cookie和 ...
- C#基础知识之理解Cookie和Session机制
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 基础知识《十二》一篇文章理解Cookie和Session
理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定 ...
- cookie和session机制
一.cookie和session机制之间的差别和联系 1.cookie机制 Cookie意为"甜饼",是由W3C组织提出,最早由Netscape社区发展的一种机制. 眼下Cooki ...
随机推荐
- 发布iOS应用(xcode5)到App Store(苹果商店) 详细解析
发布iOS应用(xcode5)到App Store(苹果商店) 详细解析 作者:Memory 发布于:2014-8-8 10:44 Friday IOS 此教程可能不太适合,请移步至最新最全的:201 ...
- CF572B Order Book 题解
Content 账单里面有 \(n\) 条记录,只有卖出记录和买入记录两种,并且都包含两个信息 \(p_i,q_i\),现在根据这些记录,请执行如下操作: 将所有 \(p_i\) 相等的同种记录合并( ...
- CF151B Phone Numbers 题解
Content 在一座城市中,每个人的电话号码都是由六位整数组成的,例如 11-45-14. 现在有 \(n\) 个人,第 \(i\) 个人有 \(s_i\) 个人的电话号码.已知: 出租车司机的电话 ...
- 如何把myeclipse的工程导入到svn服务器上
如何把myeclipse的工程导入到svn服务器上,按照如下步骤便可
- react组件配置样式hover效果的实现
需求 react 自定义一个组件,组件内部样式可以灵活配置 问题 一般样式都可以通过属性传入,比如:颜色,字号等,但是对于一些有hover效果的地方,属性传入后,按照平时css的使用方式不太容易实现 ...
- 【LeetCode】939. Minimum Area Rectangle 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 确定对角线,找另外两点(4sum) 字典保存出现的x ...
- 【LeetCode】762. Prime Number of Set Bits in Binary Representation 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历数字+质数判断 日期 题目地址:https:// ...
- 1686 第K大区间
1686 第K大区间 时间限制:1 秒 空间限制:131072 KB 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 众数(统计学/数学名词)_百度百 ...
- Elasticsearch核心技术(五):搜索API和搜索运行机制
本文将从数据存储和搜索的角度简单分析Elasticsearch的搜索运行机制,主要涉及搜索API.搜索机制.存在问题和解决方案. 4.1 Search API Search API允许用户执行一个搜索 ...
- What Makes for Good Views for Contrastive Learning
目录 概 前 InfoMin Sweet Spot 空间距离 Color Spaces Frequency Separation 构建 novel views 无监督 半监督 Tian Y., Sun ...