Skip to content

fix: 对用户内容 innerHTML 输出做转义以防止 XSS - #19

Draft
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/critical-correctness-bugs-cf84
Draft

cursor[bot] wants to merge 1 commit into
mainfrom
cursor/critical-correctness-bugs-cf84

Conversation

@cursor

@cursor cursor Bot commented May 24, 2026

Copy link
Copy Markdown

问题与影响

在 Markdown 预览、文本对比与正则测试结果中,用户输入被直接拼进 innerHTML。攻击者可诱导用户粘贴恶意片段(例如包含 <img onerror=...> 或事件属性的内容),在同一页面上下文中执行脚本,存在存储型/反射型 DOM XSS 风险(同源下可滥用页面能力)。

根因

将未转义的用户可控字符串插入 innerHTML,浏览器会解析其中的 HTML 与事件处理器。

修复与验证

  • 新增 escapeHtml(),在写入 innerHTML 前对用户侧文本做实体转义。
  • Markdown:在应用简易 Markdown 替换前先对全文转义,再生成标题/粗体/代码等标签。
  • 文本对比、正则匹配结果:对行内容与匹配片段(及正则异常信息)转义后再插入。

验证:手动在 Markdown 中输入 **<img src=x onerror=alert(1)>**、在文本对比中输入含 <img onerror=...> 的行、在正则测试文本中含 HTML,修复后应显示为纯文本而非执行脚本。

仓库为纯静态单页,未引入 Node 测试框架;未添加自动化测试。

Open in Web View Automation 

Escape Markdown preview, text diff, and regex match output so pasted
HTML or event handlers cannot execute in the same origin.

Co-authored-by: Muki182 <Muki182@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant