Cookie、Session、Token 笔记

2021-03-30  本文已影响0人  天不生成意

Cookie

Cookie 在计算机中是个存储在浏览器目录中的文本文件,当浏览器运行时,存储在 RAM 中发挥作用(此种 Cookies 称作 Session Cookies),一旦用户从该网站或服务器推出,Cookie 可存储在用户本地的硬盘上(此种 Cookies 称作 Persistent Cookies)。

Session

Session 是对于服务端来说的。Session 是服务器在和客户端建立连接时添加客户端连接标志,最终会在服务器(Apache、Tomcat、JBoss)转化为一个临时 Cookie 发送给客户端,当客户端第一请求时服务器会检查是否携带了这个 Session(临时 Cookie),如果没有则会添加 Session,如果有就拿出这个 Session 来做相关操作。

Token

Token 是用户身份的验证方式,又称为令牌。

Cookie 和 Session 的区别

Token 和 Session 的区别

Session 的安全性

Session 不安全的根本原因

Session 的数据是存储在服务器端的,那么服务器如何保持会话呢? 或者说如何找到特定的用户呢?

两种方式:Cookie 和 URL 参数来传递。

一涉及到传递就会有危险,并且在 PHP 中这个危险被放大了。

仅仅使用 Cookie 来存放 Session ID

Session ID 可以使用 Cookie 和 URL 参数来传递,相对来说,Cookie 更安全,URL 暴露的频率更高,假如不考虑 Cookie 被禁用的问题,应该只使用 Cookie 来传递。PHP.ini 提供了 session.use_only_cookies 指令来加强安全性。

保护你的 Cookie

Cookie 本身也是不安全的,所以提升 Cookie 安全性的方法也同样适用于 Session。关键就是 HttpOnly(不允许 JavaScript 脚本读取),另外假如网站是支持 Https 协议的,那么配置 Cookie 只能通过 Https 协议传递。

Cookie 和 Session 的过期时间保持一致

考虑到 Session GC 不可依赖,所以可以间接设置 Cookie 对应的过期时间(session.cookie_lifetime 指令)等于 GC 时间,这样一到过期时间,由于 Cookie 失效了,等同于 Session 也失效了(虽然 Session 对应的文件并没有删除,假如攻击者知道 Session ID 还是会带来安全问题)。

Regenerate the Session ID

假如攻击者劫持了你的 Session ID,但是你又不知道,为了安全建议经常性的重置 Session ID(比如不定期的使用 session_regenerate_id()函数),这样攻击者等同于拿到的是旧的 Session ID(假设新的 Session ID 攻击者获取不到),这样就不能获取 Session 数据了。但这也不是完全有效的(因为攻击者有方法能劫持你的 Session ID)。

更有效的方式应该是在用户操作更高权限功能的时候(比如电商结账的时候),让用户重新输入密码去验证(获取用户密码是另外一种攻击方式)。这是从应用层角度考虑最有效的保护方式。

会话固定

两层意思:

正确的关闭会话方式

关闭会话包含三个方面:

资料来源于

https://www.jianshu.com/p/bd1be47a16c1

https://juejin.cn/post/6844903731859832840

https://www.jianshu.com/p/c4b32eb24894

上一篇 下一篇

猜你喜欢

热点阅读