DrSmoothl
63ab7a1846
fix(protocol): parse Qzone feeds without eval + stop getCookies hanging (#182)
真机抓包定位到 get_qzone_feeds 的两个问题:
1) feeds3_html_more 的响应体是**JS 对象字面量**(键无引号、单引号字符串、\xNN
转义、数组含 undefined),不是 JSON → JSON.parse 报 "Expected property name
at position 66"(报告者看到的「响应结构问题」)。实测调参数(outputhtmlfeed/
format)改不掉这个格式,且 feeds 是纯远程 H5(native i64 里无相关 CGI),没有
干净 JSON 端点。改用**非执行的递归下降解析器** parseJsLiteral 把它当数据解析——
绝不 eval 远程内容(vm 沙箱不是安全边界,被篡改的响应可逃逸到 RCE)。解析器只认
对象/数组/字符串/数字/true|false|null|undefined,丢弃 __proto__ 键防原型污染;
mapFeeds 过滤数组尾部的 undefined 洞。
2) getCookies 卡死:HttpsGetCookies 无超时、无深度上限地递归跟随 302;当某跳目标
不可达(数据中心/Docker 上 qzone.qq.com 裸域超时)→ 永久挂死所有 cookie-backed
web 动作。加 8s 超时 + 深度上限(5) + 失败/超时保留已收集 cookie(不再 reject)。
两处修复均在 tempserver 真机验证:getCookies 从卡死 3 分钟变正常返回;抓到的真实
feeds 响应体做成测试 fixture,非执行解析器正确解出 uin/nickname/html(\x3C→<)。
读接口加了 TRACE 原始体日志 + 结构失败错误带响应片段,方便后续排查。
(msglist 的 -10000「使用人数过多」判定为 taotao 服务端风控——同 cookie 下 feeds
能成功、msglist 单独挂,非代码 bug,代码已正确透传。)
protocol 572 全绿、typecheck 干净;两轮对抗性 Agent:先揪出 vm 版可 RCE 逼我换非执行
解析器,再确认新解析器构造上不执行代码、无原型污染、真机数据解析正确。
2026-07-01 21:56:28 +08:00
..
2026-07-01 20:14:55 +08:00
2026-06-26 18:31:43 +08:00
2026-07-01 02:13:35 +08:00
2026-07-01 21:56:28 +08:00
2026-07-01 15:48:04 +08:00
2026-05-23 23:31:03 +08:00
2026-06-13 12:03:04 +08:00
2026-06-30 16:09:28 +08:00