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

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


一、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: GET

Cookie Manager:
  - Implementation: HC4CookieHandler
  - Policy: standard

HTTP 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()  # 获取已使用过的Token
    response = 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 session
        session.get(LOGOUT_URL)

    # Token方案
    else:
        token = get_token()
        session.headers.update({'Authorization': f'Bearer {token}'})
        yield session
        revoke_token(token)

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​
在这里插入图片描述​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值