cookie, session, token 是什么 以及相应的安全考量
Cookie
cookie 最常见的是用来保存一些账号信息,比如下图里的 记住账号 就是记录到了cookie里面

cookie 更主要的是针对和server通信的,我们知道http 是无状态的,那如果服务器想要知道客户端的一些状态信息怎么办,比如想知道这个客户是第几次登录上来,这就需要一个access counter, 这个 access counter 如果放到client端,就是cookie里面。
一个cookie具体包含哪些内容呢?可以在浏览器的设置选项里找到所有的cookie 以及每个cookie 包含的属性和值,具体可以根据自己的使用的浏览器百度之.
我们来考虑下cookie 有哪些缺点和问题呢?
比如一个user 有username, age, 喜好... 等等这些信息,
1. 如果都保存到browser里面内容有点多,而且browser对cookie的大小和数量也有限制;
2. 每次和server 通信带这么多数据,增大了网络流量
3. 如果是一些敏感数据放在browser里,有安全和隐私隐患
很自然的可以想到,如果我们只在cookie 保存username, 其他和这个username关联age, 喜好这些信息都放在server上就好了,browser每次只把username 放到server端,server端自己维护一张表就可以查到这个user的其他信息,是不是很方便?如果更近一步,因为这个username 是明文的我们也不想放在cookie里,能不能再cookie里放一个唯一标识这个用户的字符串呢?这个就是接下来要谈的session id.
Session
By default, sessions are based on cookies that live in the browser’s memory, but go away when the browser is closed. This is often, but not always, what you want.
Using a cookie with a large maxAge makes no sense unless the session timeout (inactiveInterval) is also large
你当然可以做长期的session, 但是要同时设置masAge, inactiveInterval.
服务器端存储用户数据信息. 这么多用户想要知道谁是谁, 每个必须有个名字, 或者说是id, 所谓"session id"(你可能看到过这个叫法). 用户先请求, 然后服务器生成session id(如果用户没有携带, 或已过期)并返还给用户, 用户留着, 以后每次请求, 带上这个"session id", 然后服务器拿来往数据库(或者放内存, 这个视具体应用而定)里一搜, 找到该用户及其相应的信息(有时session id集中存放, 与数据分开, 用户数据分开放在集群里), 比如: 现在对应的用户是登录状态还是超时登出了什么的.
状态信息存储在服务器端, 用户只需留存一个"session id". 大多数时候通过cookie传递存放, 当然也可以ajax传, 存Local Storage或Session Storage或IndexDB或Web SQL, 反正只要用户拿到并存着就行, 甚至可以用URL重写的方式传递.
Session 有哪些缺点和问题呢?
1. 现在很多服务器都是分布式的,如果session id 集中存放在一个服务器上就有单点故障,如果分布在不同的服务器上就有数据同步的问题
Token
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
- 客户端使用用户名跟密码请求登录
- 服务端收到请求,去验证用户名与密码
- 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
- 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
- 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
可以看出来,这里的token与sessionid有些类似,其区别:
- sessionid是带着之前的状态的,在服务器端可以getSession(sessionid)
- token是在登录验证之后发放的一个包含着用户基本信息的较长的字符串,用处是验证身份以及简化后续获取信息的难度.
- token机制更灵活,可以实现跨域
CSRF 攻击什么?
脑子里一直有个问题就是 不是说同源策略可以阻止网站A读取网站B的cookie吗,怎么CSRF就能从恶意网站A发request给B并且带上B 的cookie呢,知道看到这篇文章 同源策略以及cookie安全策略 里面讲到 “同源策略仅仅阻止了脚本读取来自其他站点的内容.但是却没有防止脚本向其他站点发出请求。因为CSRF攻击是由于某些请求被发出,而引起在服务器端执行了某些动作所引起的,所以同源策略无法防止CSRF攻击。” 和这个帖子 https://segmentfault.com/q/1010000015365597
怎么防止CSRF攻击?refer to [6]
Ref:
]1] http://courses.coreservlets.com/Course-Materials/csajsp2.html
[2] cookie session token from 知乎
[3] http无状态和鉴权解决方案:cookie、session、token、oauth2及JWT from知乎
[4] http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
[5] 同源策略以及cookie安全策略
[6] CSRF攻击与防御(写得非常好)
[7] 浅谈CSRF攻击方式
[8] token生成原理
[9] 一张图搞定OAuth2.0
[10] OAuth 2.0 ——授权码模式
cookie, session, token 是什么 以及相应的安全考量的更多相关文章
- Python Web学习笔记之Cookie,Session,Token区别
一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...
- cookie session token详解
cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, ...
- django基础之day10,cookie session token
https://www.cnblogs.com/Dominic-Ji/p/10886902.html cookie session token
- cookie,session,token介绍
本文目录 发展史 Cookie Session Token 回到目录 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档 ...
- cookie & session & token compare
cookie & session & token compare cookie.session.token 区别和优缺点 存储位置 cookie 存在 client 端 session ...
- cookie,session,token的定义及区别
参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...
- cookie,session,token的理解
Get POST 区别异同点 淘宝token的 理解 过程算法 防止伪造请求 伪造相对难 简单发展史 登录的操作: 哪些人往自己的购物车中放商品, 也就是说我必须把每个人区分开,这就是一个 ...
- cookie session token
HTTP HTTP是无状态(stateless)的网络协议.HTTP协议自身不对请求和响应之间的通信状态进行保存.也就是说HTTP协议对于发送过的请求或响应都不做持久化处理. 为了实现保持状态功 ...
- cookie session token 详解
cookie 是保存在本地终端的数据.cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器. 可以在浏 ...
随机推荐
- ArcGIS for qml - 地址地标转换为经纬度(地理编码)
实现输入地址地标转换为其经纬度 本文链接:地理编码 作者: 狐狸家的鱼 Github: 八至 一.地理编码 1.地理编码含义 地址编码(或地理编码)是使用地址中包含的信息来插入地图上的相应位置的过程. ...
- JavaScript(JS)之Javascript对象BOM,History,Location,Function...(二)
https://www.cnblogs.com/haiyan123/p/7594046.html 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创 ...
- RAP Mock.js语法规范
Mock.js 的语法规范包括两部分: 数据模板定义规范(Data Template Definition,DTD) 数据占位符定义规范(Data Placeholder Definition,DPD ...
- JMeter-Java压力测试工具-01
先去官网下载 打开 下面测试一个小栗子 建立一个工程,提供一个查询接口 package com.example.demo; import org.springframework.web.bind.an ...
- (Bash博弈 大数) 51nod1068 Bash游戏 V3
1068 Bash游戏 V3 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次拿的数量只能是2的正整数次幂,比如(1,2,4,8,16....),拿到最后1颗石子的人获胜.假设A B都非常聪明 ...
- IO以及file的一些基本方法
IO定义:将内存的数据 持久化到设备上 这个动作称为输出 写 Output操作 把硬盘上的数据读取到内存 这个动作称为输入 读 Input 把上面这两种操作称为IO操作 File类的静态成员变量:pa ...
- Java面向对象类与对象整理
第一章 面向对象: 1.1 什么是面向过程: 遇到某件事的时候,思考 “我该怎么做”然后一步一步实现的过程 1.2 什么是面向对象: 遇到某件事的时 ...
- kaggle竞赛入门整理
1.Bike Sharing Demand kaggle: https://www.kaggle.com/c/bike-sharing-demand 目的:根据日期.时间.天气.温度等特征,预测自行车 ...
- 剑指Offer_编程题_6
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...
- OS + CentOS 7 / firefox
s 一.安装firefox二.缺少so依赖如下步骤操作 1.缺少so依赖:下载firefox依赖so文件:libgtk-3.so.0.1400.13.libgdk-3.so.0.1400.13.lib ...