# Cookie 生成链路与过期处理 当 Cookie/token 过期、不需要登录的网站请求因 Cookie 失败、目标参数位于 Cookie,或需要分析 `Set-Cookie` / `document.cookie` / JS 计算 / Storage 派生 / challenge 生成链路时读取本文件。 ## 总原则 - 先判断 Cookie 是否与登录 / 账号授权相关,再决定处理方式。 - 对登录态 Cookie,不绕过登录、不索要账号密码、不破解验证码或 MFA;让用户手动登录或提供授权样本。 - 对非登录 Cookie,不要默认要求用户重新提供新 Cookie;应分析它如何生成、刷新和写入,并尽量纳入补环境或最终请求入口。 - 最终项目只能用 Node.js / Python 请求客户端发送请求;浏览器自动化只用于前置取证。 ## Cookie 分类 | 分类 | 常见特征 | 处理策略 | |---|---|---| | 登录态 / 会话 Cookie | 与账号、session、SSO、权限、Authorization 绑定 | 用户手动登录或提供授权样本;不复现登录绕过 | | 服务端首访 Cookie | 首次访问页面或接口时 `Set-Cookie` 下发 | 在最终 Node.js / Python 请求前增加首访 / challenge 请求,维护 Cookie jar | | 前端写入 Cookie | 通过 `document.cookie = ...` 写入 | Hook setter 或用 RuyiTrace 查 `document.cookie` 调用栈 | | JS 计算 Cookie | 混淆 JS、SDK、指纹模块生成 | 按 `source → entry → builder → writer` 搬运原始 JS 并补环境 | | Storage 派生 Cookie | localStorage / sessionStorage / IndexedDB 参与 | 固化必要存储键,或在入口中先生成存储再生成 Cookie | | 指纹 / challenge Cookie | 依赖 navigator、canvas、WebGL、时间、随机数、server seed | 结合 RuyiTrace / Hook / Node trace 补齐环境和 seed 传递 | | 一次性服务端状态 | 与服务端临时状态、账号风控或设备校验强绑定 | 说明不可或不应复现,要求授权交互或离线样本 | ## 分析流程 1. **确认是否需要登录** - 目标页面 / API 是否无需账号即可访问。 - 失败响应是否明确是未登录、权限不足、账号风控、验证码或 MFA。 - 若需要登录,进入用户手动登录流程,不继续尝试复现登录态 Cookie。 2. **定位 Cookie 来源** - 检查 HAR / cURL / 响应头中是否存在 `Set-Cookie`。 - Hook `document.cookie` setter,记录写入值、调用栈和写入时机。 - 若使用 ruyiPage + RuyiTrace,优先在 NDJSON 摘要和原始日志中搜索 `document.cookie`、`Document.cookie`、Storage、navigator、canvas、WebGL、crypto、performance 等相关调用。 - 检查 localStorage / sessionStorage / IndexedDB 是否参与派生。 - 检查 Worker、iframe、WASM、postMessage 是否参与生成。 3. **梳理四层链路** | 层级 | Cookie 场景中要回答的问题 | |---|---| | source | Cookie 输入来自 URL、Body、响应 seed、时间、随机数、指纹、Storage 还是已有 Cookie | | entry | 哪个函数、SDK、模块或 challenge 入口生成 Cookie 值 | | builder | 哪个请求构造 / Cookie 构造函数拼装 name、value、domain、path、expires 等 | | writer | 最终由 `Set-Cookie`、`document.cookie`、请求头 `Cookie`、fetch/XHR 拦截器或 Cookie jar 写入 | 只找到 Cookie 值或疑似函数,不代表完成;必须确认 writer。 4. **决定补环境方式** - `Set-Cookie` 可刷新:最终入口先执行首访 / challenge 请求,保存 Cookie jar,再发目标请求。 - `document.cookie` / JS 计算:将目标 JS 与必要环境补齐到 Node.js,入口运行时生成 Cookie。 - Storage 派生:在 `env.js` 或入口初始化阶段准备必要 Storage 值,并记录来源。 - 指纹 / challenge 依赖:优先从 RuyiTrace 确认环境 API,再用 Node trace 补充。 - 登录态 / 一次性服务端状态:不纳入补环境生成,转为手动登录或离线样本。 ## 输出模板 ```markdown ## Cookie 过期处理判断 - Cookie 名称: - 当前失败现象: - 是否需要登录: - 是否账号 / 授权相关: - 来源判断:Set-Cookie / document.cookie / JS 计算 / Storage 派生 / challenge / 未确认 - 关键证据:HAR / cURL / RuyiTrace api / stack.file / Hook 调用栈 - 是否可生成或刷新: - source: - entry: - builder: - writer: - 是否纳入补环境: - 最终入口中的处理方式:生成 Cookie / 刷新 Cookie jar / 用户手动登录 / 仅离线样本 - 是否需要用户补充材料: ``` ## 不合格做法 - 不区分登录态与非登录 Cookie,直接要求“重新提供有效 Cookie”。 - 对不需要登录的网站,只把 Cookie 当固定样本复制到最终代码。 - 已有 RuyiTrace NDJSON 时,不查看 `document.cookie` / Storage / 指纹相关日志,直接盲补。 - 最终产物通过浏览器自动化生成 Cookie 后再请求。 - 把真实 Cookie / token 明文写入公开报告或最终交付物。