正在检索项目代码并形成审查结论...
基于对代码库的完整检索(Astro SSG 主题 fork,面向“Корпечь 纪念项目”),审查结论如下,按严重程度排序。
严重 (Critical)
GitHub Token 明文暴露在 git 远程地址中
- 定位:
.git/config(remote URL) - 说明:push 地址中内嵌了
ghu_开头的完整 PAT(https://annachurasheva:ghu_...@github.com/annachurasheva/astro-blog)。任何拿到该工作区/仓库副本的人都能直接复用此凭据推送代码。 - 建议:立即在 GitHub 吊销该 token,改用凭据管理器或环境变量注入,禁止在 URL 中带密钥。
- 定位:
站点访问数据被发送给第三方(主题作者)的 Umami 实例
- 定位:
src/config.ts:122(umamiAnalyticsID: 'dab0e4b9-...')、src/config.ts:176(customUmamiAnalyticsJS: 'https://views.radishzz.cc/script.js') - 说明:这是上游主题(作者 radishzz)自建 Umami 的地址与站点 ID。当前配置会把本站访客行为数据上报到与纪念项目无关的第三方,属隐私泄漏/模板残留。
- 建议:换成自己的 Umami 实例与 ID;未部署前应清空这两项。
- 定位:
非文章页面 OG 图使用了写死的第三方 Apiflash access key,并指向错误站点
- 定位:
src/layouts/Head.astro:39-41 - 说明:无
apiflashKey且无postSlug时,回退逻辑把他人 API key02a837b6...与https://retypeset.radishzz.cc/(主题作者演示站)拼进og:image。后果:首页/关于/标签页的社交分享图是别的站点的截图;且该第三方密钥被明文输出到每个页面 HTML 源码。 - 建议:删除回退密钥;配置自己的
apiflashKey或改为自建 OG 图(项目已有src/pages/og/[...image].ts,可扩展用于非文章页)。
- 定位:
高 (High)
远程图片域配置指向主题作者域名
- 定位:
src/config.ts:168(imageHostURL: 'image.radishzz.cc')、astro.config.ts:23-26 - 说明:
astro:assets仅允许该第三方域名,LQIP/图片优化也会按该域名处理。若正式内容图片托管在别处,远程图片将被拒绝或产生错误请求。 - 建议:改为项目实际图片域名,或移除并仅使用本地
src/content/posts/_images。
- 定位:
site.url仍是占位域名- 定位:
src/config.ts:17(https://astro-blog.edgeone.dev) - 说明:canonical、sitemap、RSS/Atom、OG 均基于该值生成。正式上线前必须改为最终域名,否则所有绝对链接与 SEO 元数据指向错误地址。
- 定位:
中 (Medium)
评论配置自相矛盾:启用但参数为空
- 定位:
src/config.ts:81(enabled: true)与:84-94(giscus repo/repoId/category 等全空);src/components/Comment/Index.astro:13-18 - 说明:
showGiscus恒为 false,文章页实际无任何评论区,但Layout.astro:33-35仍按“有评论”预留底部间距(死配置)。 - 建议:要么补齐 giscus 配置,要么
enabled: false。
- 定位:
Giscus 主题 CSS 依赖上游 GitHub CDN
- 定位:
src/components/Comment/Giscus.astro:51-56 - 说明:主题样式从
cdn.jsdelivr.net/gh/radishzzz/astro-theme-retypeset@master/...加载(还锁定@master),而项目自身public/giscus/已有同名 CSS 却未使用。一旦上游仓库变动或 CDN 不可达,评论主题即失效。 - 建议:改用本地
${base}/giscus/theme-*.css。
- 定位:
模板作者品牌信息残留
- 定位:
src/config.ts:101(twitterID: '@radishzz_')、:106(google 站点验证串,疑似上游残留) - 说明:
twitter:site标签会标记为上游作者账号;google verification 若不属于本域反而是噪音/误归属。 - 建议:核对后改为自己的账号或清空。
- 定位:
文章内容为空,站点当前近乎空白
- 定位:
src/content/posts/(仅_images/演示图,无任何 .md/.mdx) - 说明:首页、标签页、RSS/Atom、
/og/*.png均基于 posts 生成,当前构建结果是空列表页、空 feed、OG 路由无页面。 - 建议:确认是否为 WIP;上线前至少补充首页与首批文章,否则首页与订阅器均无内容可展示。
- 定位:
低 (Low) / 建议
俄语站点存在硬编码英文文案
- 定位:
src/components/PostDate.astro:73,79(“updated”、“min”)、src/pages/404.astro:10-17(“PAGE NOT FOUND”整段英文) - 说明:阅读时间、更新时间标签、404 页对俄语访客显示英文;与
ui.ts的俄语 i18n 不一致。 - 建议:将此类文案并入 i18n 字典(
src/i18n/ui.ts)。
- 定位:
Feed 内容渲染与页面不一致
- 定位:
src/utils/feed.ts:15,166 - 说明:feed 用独立的裸
MarkdownIt渲染post.body,不经过站点的 remark/rehype 插件,代码高亮、mermaid/katex、自定义容器等在订阅器中都会丢失或变形。 - 建议:接受降级并注明,或复用站内渲染管线生成 feed HTML。
- 定位:
标题锚点 aria-label 引号被双重转义
- 定位:
src/plugins/rehype-heading-anchor.mjs:20-21 - 说明:先把
"/'手动替换为"/',序列化时又会再转义一次,导致含引号标题的无障碍标签显示为字面"。 - 建议:直接放入原始文本,由 hast 序列化统一转义。
- 定位:
robots.txt 的 sitemap 地址未拼接 base
- 定位:
src/pages/robots.txt.ts:5-11 - 说明:
new URL('sitemap-index.xml', site)忽略了base;当前 base 为空不受影响,但一旦配置子路径部署即出错。 - 建议:改为
new URL(${base}/sitemap-index.xml, site)。
- 定位:
Footer RSS 链接在 dev/prod 行为不一致
- 定位:
src/components/Footer.astro:19-31 - 说明:dev 下保留
localizedPath的尾部斜杠(/atom.xml/),prod 下再裁掉;对.ts端点路由(非 HTML 页)尾斜杠可能产生 404。 - 建议:统一按实际生成路由构造链接。
- 定位:
memoize缓存无上限- 定位:
src/utils/cache.ts:10 - 说明:
Map只增不删(失败才清理)。纯 SSG 影响有限,若未来引入 SSR/函数化会有内存膨胀风险。
- 定位:
总结:项目基于成熟的 Astro 主题二次开发,代码结构清晰、构建链完整,但当前处于明显的模板适配期——最需要优先处理的是三类问题:一是模板作者侧资产残留(Umami、Apiflash key、图片域名、twitter/验证信息),既造成隐私外泄也影响品牌与安全;二是仓库内明文 GitHub token 必须立即吊销;三是内容库为空、域名仍为占位,上线前需补齐正式内容并核对最终 site.url 与评论/统计配置。修复优先级建议为:1-5 → 6-8 → 其余。
Leave a Comment