惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
Recent Announcements
Recent Announcements
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
A
About on SuperTechFans
爱范儿
爱范儿
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
AI
AI
美团技术团队
SecWiki News
SecWiki News
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
V
Vulnerabilities – Threatpost
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cybersecurity and Infrastructure Security Agency CISA
M
MIT News - Artificial intelligence
PCI Perspectives
PCI Perspectives
aimingoo的专栏
aimingoo的专栏
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Visual Studio Blog
T
The Exploit Database - CXSecurity.com
小众软件
小众软件
N
News | PayPal Newsroom
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
NISL@THU
NISL@THU
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
MongoDB | Blog
MongoDB | Blog
H
Heimdal Security Blog
Schneier on Security
Schneier on Security
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog RSS Feed
D
Docker
Spread Privacy
Spread Privacy
Cloudbric
Cloudbric
www.infosecurity-magazine.com
www.infosecurity-magazine.com
I
Intezer
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
AWS News Blog
AWS News Blog

浮生闲记

一招解决 Office 2016 每次启动 Word 都弹出“配置进度”的问题 二十五岁,我有了第一套属于自己的房子 男人过了25,就会自动解锁一些奇奇怪怪的爱好 未竟之书 CopyTree:右键一键复制目录树,开发者的效率小工具 绿联 NAS OpenClaw 进阶教程:关闭命令审批,提升 AI 执行效率 告别低效操作:Claude Code 这些内置命令,真正让我开发效率翻倍 绿联 NAS OpenClaw 进阶教程:接入微信机器人,实现文件便捷备份 绿联 NAS OpenClaw 进阶教程:安装并使用 ClawHub 管理 Skills 绿联 NAS OpenClaw 进阶教程:自定义模型与接入 QQ 机器人 绿联 NAS OpenClaw 安装指南,轻松部署专属 AI 助手 UG12 “捕获到标准C++异常” 问题解决方案 开源热搜监控工具,支持Docker一键部署,实时追踪微博知乎等45+平台,支持关键词筛选和邮件推送 解决Windows中使用Cloude Code生成的nul文件无法删除的问题(MS-DOS功能无效) 如何为Claude Code添加Skill?官方Skill安装步骤详解 Agent Skill 入门实战指南:从零创建你的第一个 Skill ,提升 Claude Code 开发效率 告别Typora收费,用Obsidian+GitHub搭建永久免费的笔记云同步方案 告别命令行!使用GitHub Desktop图形化下载和管理项目(小白友好教程) Typora v1.10.8 破解教程(仅供学习研究) 部分网站无法访问?一次典型的DNS污染排查与解决记录 执念 风起知秋 使用Cheat Engine修改Bongo Cat倒计时与点击次数 Cheat Engine 安装与汉化详细教程 【宝可梦肉鸽】PokeRogue 游戏数据修改指南(v1.10)
服务器内部错误?修复 Halo 评论页面因 XSS 攻击无法打开的问题
浮生闲记 · 2025-11-03 · via 浮生闲记

事件背景

作为博客维护者,我们总是希望与读者保持良好的互动,评论功能就成为了必不可少的交流渠道。然而,在 2025 年 11 月,我的 Halo 博客系统遭遇了一次 XSS 攻击,导致评论管理功能受损。

这次攻击给我敲响了警钟,也让我深刻认识到数据备份和安全防护的重要性。今天就把这次完整的事件记录分享给大家,希望能帮助到遇到类似问题的朋友。

问题现象

攻击者通过直接调用接口提交了两条特殊的评论:

  1. [XSS](javascript:alert(1)) - 明显的 XSS 攻击代码
  2. test comment - 普通的测试评论

攻击评论

在这之后,Halo 的评论管理页面出现了以下异常:

  • 评论列表页面完全无法访问
  • 但可以正常打开"精选评论"和"最近评论"
  • 页面显示"服务器内部发生错误,请稍后再试"

错误提示

这个问题让我非常困扰,因为评论管理功能完全无法使用,影响了我与读者的互动。

问题原因分析

经过 GitHub 社区技术大佬的深入排查,我们发现了问题的根本原因:

数据库中的这两条异常评论数据缺少 spec.subjectRef 必需的 version 字段

这很可能是攻击者绕过前端直接调用 API 接口导致的。

技术细节说明

在 Halo 的数据库结构中:

  • spec.subjectRef 是一个引用字段,用于关联评论与对应的文章/页面
  • 完整的引用应该包含 namekindversion 三个必要字段
  • 攻击者通过非正常途径创建了数据结构不完整的评论记录
  • 当管理界面尝试加载这些损坏的数据时,由于无法正确解析引用关系,导致服务器抛出内部错误

数据结构对比

正常的评论数据结构:

{
  "spec": {
    "subjectRef": {
      "name": "post-abc123",
      "kind": "Post",
      "version": "v1alpha1"  // 这个字段是必需的
    }
  }
}

损坏的评论数据结构:

{
  "spec": {
    "subjectRef": {
      "name": "post-abc123",
      "kind": "Post"
      // 缺少 version 字段
    }
  }
}

解决方案

方案一:使用 Data Studio 可视化修复(推荐)

这是最直观安全的修复方式,通过 Halo 官方插件进行操作修复损坏的数据。

步骤 1:安装 Data Studio 插件

  1. 登录 Halo 后台管理界面
  2. 找到"插件"菜单
  3. 搜索并安装"数据工厂(Data Studio)"插件

步骤 2:定位异常数据

  1. 进入"工具" → “Data Studio”
  2. 在 Comment 表中找到异常的评论数据
  3. 可以通过关键词搜索或按时间排序找到可疑评论

Data Studio界面

步骤 3:修复数据结构

  1. 点击异常评论数据进入编辑页面
  2. 找到 spec.subjectRef 字段
  3. 注意:直接删除会卡在"删除中"状态无法成功

删除失败

  1. 需要在 spec.subjectRef 中添加缺失的字段:"version": "v1alpha1"

修复数据

步骤 4:完成修复

  1. 保存修改后,数据恢复正常状态
  2. 此时可以顺利删除恶意评论
  3. 刷新评论管理页面,确认问题已解决

优点:

  • 图形化界面操作,直观易懂
  • 不需要直接操作数据库
  • 安全性高,适合不熟悉数据库的用户

方案二:直接使用 SQL 删除恶意评论

对于熟悉数据库操作的用户,可以通过 SQL 命令快速处理。

步骤 1:查找包含 XSS 代码的评论记录

SELECT name FROM extensions
WHERE convert_from(data,'UTF8') LIKE '%javascript:alert(1)%';

执行结果示例:

/registry/microimmersion.webjing.cn/recentcomments/recent-comment-xbr6ag5e
/registry/content.halo.run/comments/1ca2d9b4-18cb-41a3-b179-509e2817fd4e

步骤 2:删除识别出的恶意评论

-- 删除恶意评论记录
DELETE FROM extensions
WHERE name='/registry/microimmersion.webjing.cn/recentcomments/recent-comment-xbr6ag5e';

DELETE FROM extensions
WHERE name='/registry/content.halo.run/comments/1ca2d9b4-18cb-41a3-b179-509e2817fd4e';

注意事项:

  • 操作前务必备份数据库
  • 确认删除的是恶意评论,不要误删正常数据
  • 建议先在测试环境验证

什么是 XSS 攻击?

XSS(跨站脚本攻击) 是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本,当其他用户浏览该页面时,这些脚本会被执行,从而盗取用户信息、会话 cookie 等敏感数据。

XSS 攻击的常见类型

  1. 存储型 XSS:恶意脚本被存储在服务器数据库中,当其他用户访问时执行
  2. 反射型 XSS:恶意脚本通过 URL 参数反射回页面
  3. DOM 型 XSS:通过修改页面的 DOM 结构执行恶意脚本

本次事件的特点

在此次事件中,攻击者不仅实施了典型的 XSS 代码注入,还通过直接调用 API 绕过了前端的数据完整性校验,造成了更深层次的影响:

  • 前端表单验证被绕过
  • 数据结构完整性被破坏
  • 影响了系统的正常运行

总结

这次事件给我留下了深刻的教训:

1. 备份是关键

定期备份真的很重要!如果此次事件中,我有良好的备份习惯,就可以快速恢复数据,避免花费大量时间排查和修复问题。

建议的备份策略:

  • 每天自动备份数据库
  • 每周备份完整系统
  • 备份文件保留至少 30 天
  • 异地备份,防止单点故障

2. 安全防护不能松懈

  • 及时更新系统到最新版本
  • 启用所有安全相关的插件和配置
  • 定期检查系统日志
  • 关注官方安全公告

3. 社区支持很重要

特别感谢 GitHub 社区技术大佬提供的深度分析和技术支持。在遇到问题时,积极寻求社区帮助往往能更快地找到解决方案。

希望这篇记录能帮助到遇到同样问题的朋友!如果你有其他安全防护建议或遇到类似问题,欢迎在评论区交流。


相关资源:

免责声明:本文基于真实安全事件撰写,旨在分享问题排查和解决经验,不构成任何安全建议。请根据实际情况采取适当的防护措施。