Cookie与Token详解及测试需重点关注点

在现代Web应用中,CookieToken 是两种常见的身份验证与会话管理机制。它们分别在不同的场景下扮演着重要的角色,在性能、灵活性和安全性方面具有各自的特点。作为测试人员,理解它们的工作原理以及如何对其进行有效的测试,是保证应用安全性和稳定性的关键。

Cookie 和 Token 是 Web 应用中用于认证和会话管理的核心机制。研究表明,它们在确保用户身份验证和数据安全方面至关重要。Cookie 是存储在用户浏览器中的小数据片段,用于记住用户信息,如登录状态、偏好设置或购物车内容。Token 则是用于认证的字符串,常用于 API 的无状态系统,服务器通过验证 Token 来确认用户身份。

从证据来看,Cookie 和 Token 的使用场景有所不同。Cookie 常用于传统 Web 应用的会话管理,而 Token 更适合现代 API 和无状态认证系统。测试人员需要理解两者的特性,以确保应用的认证机制安全且功能正常。

什么是 Cookie 和 Token?

Cookie 详解

Cookie 是网站存储在用户浏览器中的小数据片段,用于记住用户信息,如登录状态或偏好设置。它们分为:

  • 会话 Cookie:浏览器关闭后删除。
  • 持久 Cookie:在过期或手动删除前保留。

Cookie 通常通过 HTTPS 传输,并可设置 "Secure" 和 "HttpOnly" 标志以增强安全。

Token 详解

Token 是用于认证的字符串,常用于 API 的无状态系统。常见类型包括 JSON Web Tokens (JWT) 和访问令牌,通过 HTTP 头部发送,服务器验证身份。

使用场景

  • Cookie 常用于传统 Web 应用的会话管理。
  • Token 适合现代 API 和无状态认证。

测试重点

Cookie 测试

  • 确保设置 "Secure" 和 "HttpOnly" 标志。
  • 验证登出后 Cookie 被删除。
  • 测试 Cookie 是否能被篡改。

Token 测试

  • 验证每个请求的 Token 是否有效。
  • 检查 Token 过期和刷新机制。
  • 确保 Token 唯一且不可重用。

其他关注点

  • 测试登录和登出流程。
  • 确保未授权访问被阻止。
  • 检查多标签/窗口下的会话管理。

Cookie 的详细解释

Cookie 是服务器发送到用户浏览器的数据片段,浏览器存储这些数据,并在后续请求中自动发送回服务器。它们有以下类型:

  • 会话 Cookie:临时存储,浏览器关闭后删除。
  • 持久 Cookie:设置过期时间,保留到指定日期或手动删除。

Cookie 可以设置以下标志以增强安全:

  • Secure:确保仅通过 HTTPS 传输。
  • HttpOnly:防止 JavaScript 访问,减少 XSS 攻击风险。
  • SameSite:限制跨站点请求,防止 CSRF 攻击。

研究显示,Cookie 在传统 Web 应用中常用于存储会话 ID,服务器通过会话 ID 检索用户状态。这种方法是状态化的,服务器需要维护会话数据。

Token 的详细解释

Token 是用于认证的字符串,通常在用户登录后由服务器生成并发送给客户端。客户端在后续请求中通过 HTTP 头部(如 Authorization: Bearer <token>)发送 Token,服务器验证其有效性。常见类型包括:

  • JSON Web Tokens (JWT):包含用户信息的自包含令牌,通过签名验证完整性。
  • 访问令牌:通过协议如 OpenID Connect 或 OAuth 2.0 获取,用于 API 认证。

Token 的特点是无状态,服务器不维护会话状态,每个请求都依赖 Token 的验证。这适合现代 API 和分布式系统,证据显示其在微服务架构中应用广泛。

使用场景与对比

特性CookieToken
存储位置浏览器自动存储并发送客户端管理,需手动发送
状态性状态化(服务器维护会话)无状态(每个请求自包含)
安全风险易受 XSS 和 CSRF 攻击需注意 Token 泄露和刷新机制
典型使用Web 应用会话管理API 认证和无状态系统

从表中可以看出,Cookie 适合传统 Web 应用,Token 更适合 API 和现代架构。测试时需根据应用类型选择重点。

Cookie与Token深度解析

1. Cookie工作机制

本质:服务器发送到浏览器并保存在本地的小型数据片段

工作原理:

客户端首次访问 → 服务端通过Set-Cookie响应头下发

浏览器自动存储 → 后续请求自动携带Cookie头

服务端验证 → 维持有状态会话

关键属性:

Set-Cookie: sessionId=abc123; Domain=.example.com; Path=/; Max-Age=3600; Secure; HttpOnly; SameSite=Lax

 

 

2. Token工作机制

主流实现:JWT(JSON Web Token)

结构组成:

Header.Payload.Signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
 

验证流程:

客户端登录获取Token

客户端存储Token(通常LocalStorage)

请求时手动添加到Authorization头

服务端解密验证签名

测试工程师必备知识体系

1. 安全测试要点

Cookie安全:

HttpOnly测试:验证是否阻止JS访问

// 尝试读取Cookie应失败
try { document.cookie; } catch(e) { /* 预期抛出异常 */ }
 

Secure测试:非HTTPS请求不应传输

curl -I http://example.com/ --cookie "session=123"
# 应观察到Cookie未发送

SameSite测试:

# 跨站请求测试
def test_samesite():session = requests.Session()# 模拟跨站请求response = session.post('https://victim.com/transfer', data={'to': 'hacker', 'amount': 1000},headers={'Origin': 'https://attacker.com'})assert 'Set-Cookie' not in response.headers

Token安全:

签名算法测试:尝试修改Payload保留原签名

# 修改JWT中间部分但保留原签名
echo "eyJhbG...<篡改部分>...SflKxw" | base64 -d | jq
# 服务端应拒绝

​​​​​​​

时效性测试:精确到秒的过期验证

// Postman测试脚本
const token = pm.response.json().token;
const decoded = jwt_decode(token);
pm.expect(new Date(decoded.exp * 1000).to.be.lessThan(new Date(Date.now() + 3600*1000));

​​​​​​​

2. 功能测试要点

会话管理测试:

测试场景预期结果

清除Cookie后访问

跳转登录页

修改Cookie值

会话失效

过期Cookie

返回401

Token刷新测试:
 

def test_token_refresh():    # 获取初始Token    token = login()# 等待Token临近过期    ·time.sleep(TOKEN_LIFETIME - 10)# 发起业务请求    response = request_with_token(token)# 验证是否触发自动刷新    assert 'New-Token' in response.headers    assert response.status_code == 200

​​​​​​​

并发测试:

Cookie会话冲突:

# 模拟多终端登录
curl -H "Cookie: session=A" https://api.example.com/profile &
curl -H "Cookie: session=B" https://api.example.com/profile &
# 验证会话是否互斥

​​​​​​​

Token复用检测:

// 使用相同Token发起并行请求
const token = pm.variables.get('token');
const requests = [    { url: 'api/order', method: 'POST' },    { url: 'api/payment', method: 'POST' }
];requests.forEach(req => {    pm.sendRequest({        url: req.url,        method: req.method,        header: { 'Authorization': `Bearer ${token}` }    }, (err, res) => {        pm.expect(res.code).to.equal(200);    });
});

​​​​​​​

3. 性能测试要点

基准测试指标:

指标

Cookie方案

Token方案

认证耗时

依赖会话存储查询

仅需解密验证

服务端内存占用

高(存储会话)

无状态

集群扩展成本

需会话复制/共享

天然支持

测试脚本示例:

// JMeter测试计划示例
HTTP Request Defaults:  - Server: api.example.com  - Path: /auth-check  - Method: GETCookie Manager:  - Implementation: HC4CookieHandler  - Policy: standardHTTP Header Manager:  - Authorization: Bearer ${token}Throughput Controller:  - Total Executions: 1000

​​​​​​​

专项测试技术

1. 渗透测试技术

Cookie劫持测试:

# 使用Mitmproxy拦截
mitmproxy -s cookie_stealer.py
# cookie_stealer.py内容:
def response(flow):if 'Set-Cookie' in flow.response.headers:print(f"Stolen Cookie: {flow.response.headers['Set-Cookie']}")

​​​​​​​

Token重放攻击:

# 使用旧Token尝试访问
def test_token_replay():old_token = get_used_token()  # 获取已使用过的Tokenresponse = requests.get('https://api.example.com/data',headers={'Authorization': f'Bearer {old_token}'})assert response.status_code == 401  # 应拒绝旧Token

​​​​​​​

2. 自动化测试框架集成

Pytest插件示例:

# conftest.py@pytest.fixture
def authenticated_session():session = requests.Session()# Cookie方案if AUTH_TYPE == 'cookie':session.get(LOGIN_URL)yield sessionsession.get(LOGOUT_URL)# Token方案else:token = get_token()session.headers.update({'Authorization': f'Bearer {token}'})yield sessionrevoke_token(token)

总结

一个意想不到的细节是,Cookie 和 Token 可能在同一应用中混合使用。例如,Web 应用可能使用 Cookie 存储会话 ID,同时通过 Token 处理 API 调用。测试时需特别注意两者协同工作,确保不会出现安全漏洞,如 Token 泄露导致 Cookie 被劫持。

CookieToken 在现代Web应用中有着广泛的应用,它们各自有着不同的优势和适用场景。测试人员需要关注这两者在应用中的使用情况,确保它们在会话管理和身份验证中的正确性与安全性。通过全面的测试策略,可以有效避免潜在的安全漏洞,并为用户提供一个更加安全、稳定的应用环境。

Cookie 和 Token 是 Web 应用认证的核心,测试时需重点关注安全标志、验证机制、会话管理等。建议测试人员根据应用类型选择测试重点,并结合工具如 Burp Suite 进行安全测试。

 

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/74077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 2022.3.x部分Android设备播放视频黑屏问题

Android平台视频兼容性问题很多…类似的黑屏问题真的很头大&#xff0c;总结一些常见问题&#xff1a; 1. 视频文件不支持压缩 如果使用AssetBundle加载视频&#xff0c;这个AssetBundle压缩格式要选None。有人可能会说最新版Unity已经支持bundle压缩下播放视频&#xff0c;稳…

Redis - 概述

目录 ​编辑 一、什么是redis 二、redis能做什么&#xff08;有什么特点&#xff09;&#xff1f; 三、redis有什么优势 四、Redis与其他key-value存储有什么不同 五、Redis命令 六、Redis数据结构 1、基础数据结构 2、高级数据结构 一、什么是redis 1、redis&#x…

数据库部署在服务器表不存在解决方案

MySQL 数据库表不存在错误解决方案 MySqlException (0x80004005): Table store.SysLogOperate doesnt exist 服务器用的mysql5.6 用这个表syslogoperate只是全是小写 看起来你在使用 Pomelo.EntityFrameworkCore.MySql 作为 MySQL 数据库的提供程序&#xff0c;并且在初始化…

图灵完备——游戏中进行实践

图灵完备 简述结构一、基本逻辑电路1、低电平2、高电平3、非门4、与门5、三路与门6、或门7、三路或门8、与非门9、或非门10、异或门11、同或门 二、算数运算&&存储器1、二进制速算2、成对的麻烦 简述 这周就要学习计算机组成原理了&#xff0c;为了学起来不那么吃力&am…

踏过强化学习的每一步推导

给定 l [ a n , . . . , a 0 ] l[a_n, ..., a_0] l[an​,...,a0​]&#xff0c;现在 for idx in range(len(l)-2, -1, -1):l[idx] l[idx1] * ld注&#xff1a;这里的ld就是 λ \lambda λ&#xff0c;定义 λ 0 1 \lambda^01 λ01 证明变换后&#xff1a; l [ ∑ i 0 n …

AI小白的第七天:必要的数学知识(概率)

概率 Probability 1. 概率的定义 概率是一个介于 0 和 1 之间的数&#xff0c;表示某个事件发生的可能性&#xff1a; 0&#xff1a;事件不可能发生。1&#xff1a;事件必然发生。0 到 1 之间&#xff1a;事件发生的可能性大小。 例如&#xff0c;掷一枚公平的硬币&#xf…

UE5 + Rider + VsCode 接入腾讯的 Puerts 脚本

学习了一段时间 U&#xff0c;写点啥就得等编译&#xff0c;体验真的是一言难尽。。。。。。 然后就想着给自己找个脚本好了&#xff0c;调研了一下 AngelScript&#xff0c;puerts 的可行性。 AngelScript 看着真的诱人&#xff0c;但是发现连官方提供的都是 UE 的预编译版本…

凸包构造算法—Graham 扫描法

1. 理论原理推导 核心思想 Graham 扫描法基于以下基本思想&#xff1a; 极角排序&#xff1a; 选取一个参考点&#xff08;通常选择 y 坐标最小的点&#xff0c;若存在多个&#xff0c;则选 x 坐标最小的&#xff09;&#xff0c;将其他点按照与该参考点构成的极角进行升序排…

如何在 Windows 上安装与配置 Tomcat

Apache Tomcat 是一个开源的 Servlet 容器和 Web 服务器&#xff0c;广泛用于 Java Web 应用的开发和部署。它是实现 Java EE&#xff08;现称 Jakarta EE&#xff09;规范中的 Servlet 和 JSP 的官方参考实现。在本文中&#xff0c;我们将详细介绍如何在 Windows 系统上安装并…

测试模版15

本篇技术博文摘要 &#x1f31f; 引言 &#x1f4d8; 在这个变幻莫测、快速发展的技术时代&#xff0c;与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮&#xff0c;一名什么都会一丢丢的网络安全工程师&#xff0c;也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…

拦截、限流,针对场景详细信息(一)

以下是一个基于Java Spring Boot Redis 的完整限流实现案例&#xff0c;针对同一接口前缀&#xff08;如 /one/ &#xff09;的IP访问频率控制&#xff1a; 场景&#xff1a;用户不用登录即可访问接口&#xff0c;网站会有被攻击的风险 URL&#xff1a;one/two/three one/…

计算机视觉算法实战——烟雾检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 烟雾检测领域介绍 烟雾检测是计算机视觉在公共安全领域的重要应用&#xff0c;它通过分析视频或图像序…

MySQL-DCL函数

DCL DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 管理用户 1). 查询用户 use mysql; select * from user; select * from mysql.user; 查询的结果如下: 其中 Host代表当前用户访问的主机, 如果为localhost, 仅…

linux 服务器创建服务器启动后服务自启动

1、在/etc/systemd/system/下touch一个文件&#xff1a; touch /etc/systemd/system/your_application.service 2、在文件中写入&#xff1a; [Unit] Descriptionmodules-system Aftersyslog.target[Service] Typeforking Userroot Grouproot ExecStart/bin/bash /usr/loca…

端到端语音识别案例

《DeepSeek大模型高性能核心技术与多模态融合开发&#xff08;人工智能技术丛书&#xff09;》(王晓华)【摘要 书评 试读】- 京东图书 语音识别这一技术正如其名&#xff0c;是通过精密地解析说话人的语音来识别并准确转写出其所说的内容。它不仅仅是一个简单的转录过程&#…

QT——信号和槽

QT是图形化界面&#xff0c;自然是需要与用户进行交互的&#xff0c;但是该如何实现用户与界面或者程序的交互呢。答案是通过信号和槽。 一&#xff0c;什么是信号和槽&#xff1f; 在Linux操作系统里面&#xff0c;我们知道信号是由硬件或者软件产生&#xff0c;但是在QT里面…

Q:如何保证备份的有效性以及备份频率设置的优化方案?

1、如何保障备份数据的一致性 a) 快照 快照通过捕获数据在某一时刻的完整状态来保障备份一致性。在应用层&#xff0c;快照会暂停业务写入或生成事务一致性检查点&#xff08;如数据库的全局读视图&#xff09;&#xff0c;确保备份数据不包含未提交的事务&#xff1b;在存…

Linux实用操作及命令

一、各类小技巧&#xff08;快捷键&#xff09; 1、强制停止&#xff08;ctrlc&#xff09; Linux某些程序的运行&#xff0c;如果想要强制停止它&#xff0c;可以使用快捷键ctrl c 命令输入错误&#xff0c;也可以通过快捷键ctrl c&#xff0c;退出当前输入&#xff0c;重…

压测工具开发(一)——使用Qt Designer构建简单界面

你好&#xff0c;我是安然无虞。 文章目录 项目功能概述构建菜单栏、工具栏1. 菜单栏注意事项2. 工具栏注意事项3. 日志停靠窗口 项目功能概述 开发一款 Qt版本的压测工具, 可以用来做 基于HTTP API接口的 性能测试. 要求做一个 MDI 多功能子窗口的 图形界面程序, 方便公司内…

Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(ollama方式)

操作系统&#xff1a;Ubuntu Linux 22.04 一、安装模型运行环境 打开链接https://ollama.com/download/linux 1.安装ollama &#xff08;1&#xff09;一条指令即可实现的简易版安装方法&#xff08;也可称为在线安装&#xff09; curl -fsSL https://ollama.com/install.s…