Typecho 防止评论区 XSS 攻击最有效的方法是升级到修复后的最新版本,并对评论输出字段进行 HTML 实体转义处理。适用于所有使用 Typecho 1.2.0 及以下版本的博客,主要风险边界在于旧版本 comments.php 文件未对 URL 参数进行严格过滤。
先说结论:优先升级程序版本至 1.2.1-rc 或更高,其次通过代码过滤评论输入,最后配合 WAF 防护。
- 先判断:检查当前 Typecho 版本号是否低于 1.2.1-rc。
- 优先做:更新核心程序或手动修改 themes/default/comments.php 文件。
- 再验证:提交包含 script 标签的测试payload,确认页面源码是否转义。
快速处理思路
如果不方便立即升级核心程序,可以直接修改主题文件过滤输出。找到主题目录下的 comments.php 文件,定位到输出评论者 URL 的代码段,使用 htmlspecialchars 函数包裹变量。此方法适用于无法立即升级生产环境的站点,风险边界是主题更新后会覆盖修改,需要重新应用。
为什么会这样
Typecho 评论区 XSS 漏洞主要是因为用户输入的 URL 参数在回显到 HTML 时未进行充分转义。攻击者在评论区的网址填空处填入恶意 JavaScript 代码,当其他用户访问该页面时,代码会在浏览器中执行。公开资料中没有看到可靠的量化数据说明受影响站点的具体比例,但已知 Typecho 1.2.0 及以下版本存在该储存型 XSS 漏洞。
分步处理
按照版本更新、代码加固、外围防护的顺序进行操作,每一步完成后需检查站点功能是否正常。
第一步:检查并更新版本
登录后台查看版本号,若低于 1.2.1-rc,前往官方仓库下载最新代码覆盖核心文件。注意备份数据库和 config.inc.php 配置文件,避免升级后配置丢失。
第二步:手动代码过滤
若无法升级,编辑 usr/themes/你的主题/comments.php 文件。找到输出 URL 的位置,将原始代码修改为使用 htmlspecialchars 处理。参考渗透测试资料,也可以使用 strip_tags 方法去除 HTML 标签,仅保留纯文本。
第三步:后台安全加固
修改后台登录地址,将 admin 文件夹重命名为随机名称,并在 config.inc.php 中同步修改__TYPECHO_ADMIN_DIR__定义。删除根目录下的 install.php 文件和 install 文件夹,防止被重新安装。
怎么验证是否生效
验证方法是在评论区网址栏输入测试 payload,查看页面源代码是否包含转义字符。具体操作是在 URL 框输入 http://example.com/">,提交后查看页面源码。如果看到<script>字样而不是