Skip to content

v0.3.0 — 身份解析硬化 + 自动拉黑 + UI 重写

Choose a tag to compare

@foru17 foru17 released this 26 May 13:09
· 800 commits to main since this release
4c83b40

v0.3.0 (2026-05-26)

🛡️ 身份解析硬化(治根那条 avatar-id 误判)

  • NEW: MAIN-world 内容脚本拦截 X 自家 /i/api/graphql/* 响应,直接拿真 rest_id,不再依赖头像 URL 反推
  • NEW: 读 <script type="application/ld+json">mainEntity.identifier 作为 profile 页规范 ID 源
  • NEW: 从 data-testid="<uid>-(follow|unfollow|subscribe)" 兜底拿 uid
  • HARDENED: legacy.id_str vs rest_id 不一致直接丢弃;用 Twitter snowflake epoch 反解 candidate uid 注册时间跟 legacy.created_at 比对,差异 >2 天且撞 avatar media id → 直接丢弃 + warn
  • 9 条 ingestGraphqlUsers 公开 API 回归测试

🤝 Viewer-scoped 过滤

5 个新 Signal 字段(viewerIsSelf / viewerFollowing / viewerBlocking / viewerMuting / viewerFollowRequestSent)。前端扩展 + 服务端 /v1/classify + /v1/report 双层短路:

  • 你自己、你关注的人、你 mute / block 的人 → 永远不会被自己上报
  • 公榜信任分不会被自己污染

⚡ 对已确认的垃圾号自动拉黑(设置项,默认 OFF)

新设置 autoBlockListHits。开启后两条路径都进入既有限速拉黑队列:

来源 触发 说明
list_hit /v1/check 命中(无视 verdict.label) 服务端已过滤 status='human_confirmed',被返回即公榜确认。管理员手动加黑名单(即使 AI 标签是"不确定 35%")也自动拉。修复线上 case Mary @Mary1463962 / Mark @Mark76056378472。
cache_hit 本地缓存 verdict 是 spammy 标签 缓存是本机 AI 判断,软信号,仅在 spam / porn_bot / likely_spam 时下手

两条 auto 路径都跳过 confirm_spam 再上报(不污染公榜 reporter count)。
管理面板审计标签:公榜命中 / 缓存命中 / 手动 / 一键全部

🎨 UI 重写

  • 浅色主题@media (prefers-color-scheme: light) 跟系统切换
  • 每行勾选:bubble card 内每条 finding 带 checkbox,一键拉黑只对选中
  • 异步上报状态机:上报 → 上报中 → 已上报 / 失败(带错误 tooltip)
  • Popover 边界 flip:超出 viewport 自动翻到另一侧
  • 雷达环进度:pill 用 conic-gradient 可视化扫描进度
  • 管理面板左上角图标:通用盾牌 SVG → 小蓝吉祥物 PNG(跟 popup 一致)

🔒 XSS 加固

ui.ts 所有 innerHTML 模板插值统一过 escHtml(),关闭一条真实存在的 prompt-injection 路径——攻击者 X bio 注入 → LLM reasons 字段输出 HTML → 角标悬浮卡 innerHTML → content-script 上下文 RCE。Shadow DOM 不隔离 JS 执行。

工程

  • 版本 0.2.0 → 0.3.0
  • README、docs/STATUS.mddocs/CWS_LISTING.md 同步更新
  • TypeScript strict + Biome + 15 个测试 + WXT 生产构建全绿

如何升级

Chrome Web Store 用户:商店审核通过后会自动推送,无需任何操作。

手动加载 / Edge / Brave / Arc 用户

  1. 下载 mxga-extension-0.3.0-chrome.zip
  2. 解压
  3. chrome://extensions → 「加载已解压的扩展程序」→ 选解压目录

完整 diff

PR #19#19