Skip to content

v1.5.2 — 安全加固与健壮性提升

Choose a tag to compare

@zycwer zycwer released this 22 Jul 12:56

本次更新

本次版本聚焦于 安全加固(XSS 修复)功能缺陷修复错误处理完善SEO/规范改进,共修复 16 项问题,涉及 18 个文件。


🔒 安全修复(XSS / 注入防护)

文件 问题 修复
recent-updates.njk RSS 外部内容(title/excerpt/date/link)未转义,存在 XSS 对所有 RSS 字段加 | escape
Timeline.njk innerHTML 拼接文章数据(title/path/date/icon),可被注入 改用 DOM API(createElement + textContent)构建节点
Timeline.njk {{ data | dump }} 未转义 </script>,可打断脚本上下文 dump 后 replace </<\/
search.js 搜索摘要经 innerHTML 写入,内容中 < > & 被当作标签解析 写入前先转义 HTML,再高亮关键词
htmlGenerator.js 相关文章列表动态内容(title/path/img/excerpt/date)未转义 新增 escapeHtml() 函数统一转义

🐛 功能缺陷

文件 问题 修复
category.njk {% set fancy %}{% extends %} 外,导致 fancy 标签云从不生效 删除 set,直接用 theme.tagcloud.fancy
category.njk tagcanvas 配置 textColour: null 重复;fadIn 拼写错误(应为 fadeIn),淡入效果失效 删除重复项;修正拼写
subpage.js posts.data.sort() 修改 Warehouse Query 原数组,导致后续数据污染 改用 toArray() 创建副本后排序
tagcloud.js 直接修改传入的 config 对象,污染原始主题配置 使用 Object.assign() 创建副本
related-post.njk 类名 realated__body 拼写错误(应为 related__body 修正拼写

🛡️ 错误处理 / 健壮性

文件 问题 修复
search.js fetch 无 res.ok 检查和 .catch(),网络失败时搜索静默失效 添加 res.ok 检查 + .catch() 错误日志
search.js 正则 d 标志(hasIndices)兼容性差(Safari < 16.4 不支持),导致搜索功能完全失效 移除 d 标志,改用 match.index + match[0].length
copy-code.js 同步 try/catch 无法捕获异步 navigator.clipboard.writeText() Promise,复制失败仍显示"已复制" 改为 async/await
HeartCurve.njk 构造函数抛错未捕获中断后续脚本;hover 监听器反复累积;console.log 残留 添加 try-catch;hoverBound 标志防重复绑定;删除 console.log
recent.js 全局 keydown 监听干扰输入框方向键输入 检查 target 是否为 INPUT/TEXTAREA/contentEditable
font.js 配置字段缺失时解构崩溃;getSubTextundefined.map 崩溃;console.log 代替 hexo.log 添加配置校验 + 防御性 || 回退;改用 hexo.log.info
recent.js(generator) fetchText 递归重定向无次数限制(循环重定向导致栈溢出);响应流缺少 error 监听 添加 maxRedirects 限制(默认 5)+ res.on('error')
filters/stylus.js + lazy-img.js 非规范注册(模块加载时立即执行,依赖全局 hexo 改为 module.exports = hexo => {} 规范写法

📈 SEO / 规范改进

文件 问题 修复
layout.njk 缺少 <link rel="canonical">,影响搜索引擎去重 添加 canonical 链接
layout.njk <html lang="zh-cn"> 硬编码,多语言站点不适用 改为 {{ config.language or 'zh-cn' }}
layout.njk mask-icon color 引用不存在的 theme.android_chrome_color,颜色恒空 回退到 theme.pwa.theme_color
group-link.njk width="20px" / height="20px" 属性误用单位(HTML 属性应为无单位整数);浮点除法 去除 px;改用 round(0, 'ceil') 向上取整
reward.njk SVG width/height 属性误用 px 单位 去除 px
category.njk window.onload = 覆盖其他 load 处理器;DEBUG 文案直接渲染给访客 改用 addEventListener;文案改为友好提示

Full Changelog: v1.5.1...v1.5.2