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 是什么 以及相应的安全考量的更多相关文章

  1. Python Web学习笔记之Cookie,Session,Token区别

    一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...

  2. cookie session token详解

    cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, ...

  3. django基础之day10,cookie session token

    https://www.cnblogs.com/Dominic-Ji/p/10886902.html cookie session token

  4. cookie,session,token介绍

    本文目录 发展史 Cookie Session Token 回到目录 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档 ...

  5. cookie & session & token compare

    cookie & session & token compare cookie.session.token 区别和优缺点 存储位置 cookie 存在 client 端 session ...

  6. cookie,session,token的定义及区别

    参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...

  7. cookie,session,token的理解

    Get  POST 区别异同点 淘宝token的 理解   过程算法 防止伪造请求  伪造相对难 简单发展史  登录的操作: 哪些人往自己的购物车中放商品,  也就是说我必须把每个人区分开,这就是一个 ...

  8. cookie session token

    HTTP    HTTP是无状态(stateless)的网络协议.HTTP协议自身不对请求和响应之间的通信状态进行保存.也就是说HTTP协议对于发送过的请求或响应都不做持久化处理. 为了实现保持状态功 ...

  9. cookie session token 详解

    cookie 是保存在本地终端的数据.cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器. 可以在浏 ...

随机推荐

  1. poj2893 M×N puzzle

    x数码难题有解性判定: 只有必要性证明,没有充分性...... 还记得那个naive至极的八数码难题吗? 它回来了! 主要是借助逆序对这一神奇的手段: 考虑把x数码写成一排时的逆序对的奇偶性: 当你左 ...

  2. 构建flutter环境并实现属于我们的hello world

    我们知道flutter和react-native一样,都是既可以运行在andorid也可以运行在iOS环境下的. 我之前是react-native开发者,我的电脑环境中已经安装好了jdk,sdk,以及 ...

  3. io系列之其他事项

    二.对IO异常的处理. io操作中,只要涉及到底层操作的就必须进行 io异常处理. IOException 是IO操作中必须处理的异常. 示例: class IOExceptionTest { pub ...

  4. Good Bye 2018 D. New Year and the Permutation Concatenation

    传送门 https://www.cnblogs.com/violet-acmer/p/10201535.html 题意: 求 n 的所有全排列组成的序列中连续的 n 个数加和为 n*(n+1)/2 的 ...

  5. TestNg-数据驱动-dataProvider

    参考https://blog.csdn.net/hjianhui24/article/details/50554828 之前的用例自己一笔一划写出来的,知道了数据驱动的概念之后,修改了一下用例. @D ...

  6. python自动化开发-[第四天]-函数

    今日概要: - 函数对象 - 函数嵌套 - 命名空间和作用域 - 闭包 - 装饰器 - 迭代器 - 生成器 - 内置函数 一.函数对象 1.函数对象的定义: 函数是第一类对象,即函数可以当作数据传递 ...

  7. jmeter计算身份证校验位

    idcard_no='111111198101017000' ; idcard_no_array = idcard_no.substring(0,17).toCharArray(); int[] c ...

  8. CentOS上手工部署kubernetes集群

    本文完全是根据二进制部署kubernets集群的所有步骤,同时开启了集群的TLS安全认证. 环境说明 在下面的步骤中,我们将在三台CentOS系统的物理机上部署具有三个节点的kubernetes1.7 ...

  9. Linux记录-监控系统开发

    需求:使用shell定制各种个性化告警工具,但需要统一化管理.规范化管理.思路:指定一个脚本包,包含主程序.子程序.配置文件.邮件引擎.输出日志等.主程序:作为整个脚本的入口,是整个系统的命脉.配置文 ...

  10. JMeter:Dashboard Report自动生成测试报告的巧用和避坑

    官网地址查阅:http://jmeter.apache.org/usermanual/generating-dashboard.html 最近在压测过程中使用 Generating Report Da ...