会话安全经常在状态转换中失败:登录之后、改密之后、第二台设备出现时,或者会话应该过期却仍然保留权限。
为什么需要这个 Skill
会话安全测试 Skill 为会话创建、固定、过期、撤销、并发和跨设备边界准备有证据边界的场景,同时把设计声明与执行后的安全结果分开。
Skill 用来做什么
本文关注的会话规则只有在生命周期和失效边界可观察时才真正有用。
当你要在隔离环境使用合成账号复核会话行为时,使用这个 Skill。它识别安全问题和验证动作,不会登录生产、读取凭证或宣布系统安全。
结果要写清会话状态、角色与设备、触发条件、预期令牌或权限变化、证据、负责人、关闭条件和安全验证方式。
当认证改造、刷新令牌行为变化、退出或改密流程重做,或者跨设备策略不明确时,使用这个 Skill。
它不做什么
会话安全测试 Skill 可以整理会话生命周期的材料、证据和下一步动作,但它不能替代:
- 业务或领域负责人对规则、范围和风险的确认。
- 真实环境、账号、数据、日志或运行结果;静态分析不会自动升级为运行证据。
- 发布、合规、生产操作和残余风险接受等授权决定。
- 在输入相互冲突时替团队选择一个未经确认的事实。
它主要检查哪些内容
围绕每种会话机制,把创建、轮换、过期、撤销和并发事件连成状态表,再列出需要核对的证据:
| 检查关注点 | 开始前要问 | 结果应留下什么 |
|---|---|---|
| 会话生命周期 | 会话状态、触发、角色和设备 | 来源与适用性 |
| 安全关注 | 意外权限、固定、旧权限或跨设备泄露 | 证据状态 |
| 预期边界 | 什么应过期、轮换、撤销或保留 | 策略与负责人 |
| 验证动作 | 安全重放和所需证据 | 合成账号与清理 |
如果某一行只有经验判断、没有来源或验证方法,就把它留在待确认项里,不要提前写成通过。
开始之前先审计输入
开始复核会话生命周期前,先把输入分成六种状态。缺口不会自动变成失败,但也不能被隐藏在结论里。
| 状态 | 含义 | 本 Skill 的处理方式 |
|---|---|---|
| known | 材料直接证明的事实 | 标出来源、版本和时间,允许进入判断 |
| missing | 本轮需要但尚未提供的材料 | 列出最小补证动作,结论保持受限 |
| conflicting | 来源之间互相矛盾 | 并列来源和冲突点,交给负责人裁决 |
| stale | 材料存在但版本或时间已经过期 | 标出新鲜度,不把旧结论当当前事实 |
| out_of_scope | 有关但不在本轮范围内 | 明确排除,避免分析悄悄扩大 |
| assumptions | 为继续分析而暂时采用的假设 | 写出验证方式和失效条件 |
至少把输入版本、范围、环境、证据位置和负责人放在一起。没有运行记录时,只能交付分析、设计或验证计划,不能写执行通过。
从问题到结构化发现
先把来源、范围、证据状态、分析判断、责任角色、动作、关闭条件和验证方式连起来,再写结论。下面的案例保留这个 Skill 的专属编号和领域语境。
分层写法
围绕会话生命周期,不要把四种判断揉成一句“建议通过”:
| 层次 | 写法 | 本文应用 |
|---|---|---|
| 事实 | 材料直接显示了什么 | 引用来源中的重点、版本、输入或运行记录 |
| 基于证据的推断 | 多个事实共同支持的判断 | 说明推断链,并保留不确定性 |
| 建议 | 下一步最小动作是什么 | 指定补证、复核、执行或回归路径 |
| 人工决策 | 谁需要决定什么 | 由负责人确认范围、风险接受、资源和发布含义 |
一个完整案例
本节按输入、分析、发现、决策和验证展开;材料不足时保留 missing、conflicting 或 assumptions 状态,不把它们改写成通过。
输入
| 材料 | 这次提供什么 | 缺失时的处理 |
|---|---|---|
| 会话模型 | 创建、刷新、过期、退出、改密和撤销规则 | 未文档化的转换保留问题 |
| 角色与设备 | 用户角色、浏览器/设备类型、并发和租户范围 | 缺失边界要标出 |
| 令牌证据 | 脱敏声明、Cookie 标志、ID、时间戳和服务端记录 | 不要提供真实令牌 |
| 验证环境 | 合成账号、隔离预发布环境、日志和清理方案 | 不登录生产 |
可以这样调用:
请使用 session-security-testing Skill。
任务:复核改密是否撤销 Web 和移动端会话,同时保留一个批准的恢复设备。
输入材料:[会话策略、token 元数据、改密流程、设备规则、staging 日志和合成账号]
范围:[Web 与移动端 staging]
限制:[不使用真实凭证、不访问生产]
覆盖创建、固定、过期、撤销、并发和跨设备边界,没有依据的安全结论保持 pending。
分析
先根据输入、检查矩阵和证据状态整理判断,再进入发现;缺失材料保留为缺口。
发现
聚焦例子:检查 Web 和移动端的改密撤销
改密撤销了 Web Cookie,却让移动端刷新令牌继续可用。这个 Skill 应记录跨设备撤销缺口,保留已批准的恢复设备例外,并建议使用合成账号重放,同时记录令牌时间戳和服务端撤销证据。
整理证据时,把刷新凭据和已经签发的访问令牌分开追踪;它们可能受不同的失效合同约束:
| 凭据状态 | 需要比较 | 不能直接推断的结论 |
|---|---|---|
| 刷新令牌 | 改密前后对应的脱敏标签、签发时间、服务端撤销状态及后续刷新记录 | 退出响应成功不证明刷新令牌已撤销 |
| 已签发的访问令牌 | 令牌的有效期声明、资源请求结果和适用的撤销规则 | 刷新令牌撤销不自动证明现有访问令牌立即失效 |
| 跨设备会话 | Web Cookie、移动端刷新凭据、恢复设备例外和服务端会话记录 | 不能把一个客户端的结果当成所有设备的结果 |
如果策略没有说明改密后现有访问令牌如何处理,就把这条规则留为待确认;不要自行设定有效时长或“立即失效”的结论。验证候选仍应使用合成账号,并保存脱敏凭据标签、时间线和服务端证据。
复核可以准备安全场景和证据检查,不能在没有授权运行前证明漏洞利用成功、不存在漏洞或发布安全。
示例发现:把一次问题写成可交接动作
下面的字段示例只展示记录方式,不代表真实环境已经执行。
假设当前材料无法说明改密后 Web 和移动端会话应处于什么状态,可以这样记录发现。它既不替团队补写规则,也不把缺失证据伪装成失败。
| 字段 | 示例写法 |
|---|---|
| 来源与范围 | 记录本轮使用的需求、版本、环境,以及 Web 和移动端会话撤销规则 |
| 发现 | 改密后的跨设备会话状态仍缺少可追溯依据 |
| 证据状态 | missing / assumptions;如果来源相互矛盾则改为 conflicting |
| 影响与优先级 | 说明会影响哪个用户、链路或交付决定,不凭感觉扩大等级 |
| 负责人和人工决策 | 由业务、开发、安全或测试负责人确认规则和风险取舍 |
| 动作与关闭条件 | 补齐最小证据;关闭条件是来源、判断和责任人都能复核 |
| 验证 | 指定一次可重复的检查、查询或运行,并保存原始产物 |
接手者应能沿会话时间线比较触发事件前后的旧、新凭据和服务端会话状态。
决策
是否接受仍有效的旧凭据或保留恢复设备,需由会话策略负责人确认;Skill 只整理证据与候选动作。
验证
关闭前按发现中的验证方式执行,并保留原始产物;没有执行记录时,状态仍然保持未验证。
发现如何进入下一阶段
交接产物
| 产物 | 要回答的问题 | 示例状态 |
|---|---|---|
| 会话生命周期 | 会话状态、触发、角色和设备 | 来源与适用性 |
| 安全关注 | 意外权限、固定、旧权限或跨设备泄露 | 证据状态 |
| 预期边界 | 什么应过期、轮换、撤销或保留 | 策略与负责人 |
| 验证动作 | 安全重放和所需证据 | 合成账号与清理 |
每条结论都应该能回到来源、证据状态和下一步动作。材料不足时保留 pending、blocked、未评估或 NOT_SCORED,不要用肯定语气填补证据空白。
下一步路由
至少交付来源、证据状态、负责人、关闭条件和验证动作;下一阶段的结论仍受证据状态约束。
怎样准备更好的输入
提供会话生命周期、令牌类型、Cookie 和存储策略、角色/设备矩阵、改密/退出规则、环境、合成账号和清理方案。令牌值必须脱敏。
交接时至少保留输入版本、范围、时间窗口、证据索引、假设、人工决策边界和最小验证动作。
和其他 Skill 怎么配合
- 认证测试:https://inaodeng.com/zh-cn/qaskills/authentication-testing/;检查身份建立和登录流程。
- 授权测试:https://inaodeng.com/zh-cn/qaskills/authorization-testing/;检查会话变化后的资源访问。
- 敏感信息暴露审查:https://inaodeng.com/zh-cn/qaskills/secrets-exposure-review/;复核令牌和日志暴露边界。
容易踩的坑
- 只在一个浏览器测试退出,漏掉刷新令牌或移动端会话。
- 只看令牌过期时间,不检查服务端撤销和资源授权。
- 用真实账号或线上令牌证明安全边界。
安装与调用
npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh --skill session-security-testing
安装说明与排查方式:
- README:https://github.com/naodeng/awesome-qa-skills/blob/main/README.md
- FAQ:https://github.com/naodeng/awesome-qa-skills/blob/main/FAQ.md
- 安装手册:https://github.com/naodeng/awesome-qa-skills/blob/main/scripts/INSTALL_SKILLS.md
请使用 session-security-testing Skill。
提供目标、范围、版本、证据路径、限制和决策边界。
先审计输入,保留证据状态,最后给出负责人、关闭条件和验证方式。
常见问题
令牌生命周期短就够安全吗?
不够。过期、轮换、撤销、存储、并发和资源检查共同决定会话安全。
可以把生产账号拿到预发布环境复用吗?
不可以。使用明确角色的合成账号并清理,不要跨环境搬运真实凭证。
这个 Skill 会直接登录或重放令牌吗?
不会。它只根据提供的材料整理场景和验证建议;实际执行需由获授权的测试人员在隔离环境完成。
把 Skill 用在一份真实项目的脱敏材料上,并与来源一起保存,更容易核对结果。先验证不确定点,再根据证据决定是否扩大范围。
参考
静态计划、文件存在和空跑保留原有证据状态,不能变成运行时证明、全部通过结论或发布批准。
- 会话安全测试提示词(执行契约): https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/session-security-testing/prompts/session-security-testing.md
- 会话安全测试 Skill 源目录:https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/session-security-testing
- 会话安全测试详情页:https://inaodeng.com/zh-cn/qaskills/session-security-testing/
- Awesome QA Skills 项目:https://github.com/naodeng/awesome-qa-skills