静态网站仍需安全巡检,因html可被篡改、外部cdn脚本可能失守、注释或robots.txt暴露敏感路径;须检查script/iframe来源可信性、启用sri与sandbox、清理调试痕迹、验证响应头及构建供应链风险。

静态网站真没后端,就不用做安全巡检?
不是。静态网站被挂马、注入恶意 JS、被劫持跳转的案例每年都在增长——根源不在后端,而在前端资源加载逻辑和部署配置。HTML 文件本身可被篡改,script 标签引入的外部 CDN 脚本一旦域名失守或被污染,整站就成傀儡。更常见的是,开发者把敏感路径(如 /admin/、/backup/)留在 HTML 注释里,或用 robots.txt 暴露测试目录,给扫描器递刀。
检查 HTML 中所有 script 和 iframe 引入源是否可信
这是最常被忽略的第一道防线。不要只看“是不是 HTTPS”,重点是:这个域名你是否完全可控?是否用了未锁定版本的 CDN?
- 逐个检查
<script src="..."></script>的src值:优先替换成完整哈希校验的本地副本,或使用integrity+crossorigin属性(例如:<script src="https://cdn.jsdelivr.net/npm/vue@3.4.21/dist/vue.global.prod.js" integrity="sha384-..." crossorigin="anonymous"></script>) - 禁用任何带
document.write或动态拼接 URL 的内联脚本,它们无法被子资源完整性(SRI)保护 -
iframe必须加sandbox属性,哪怕只是嵌 YouTube 视频;若需交互,显式声明权限,如sandbox="allow-scripts allow-same-origin",避免裸写sandbox - 发现引用了
cdnjs.cloudflare.com、unpkg.com等公共 CDN 且无integrity的,立刻查对应版本 SHA 长度是否匹配(sha256-或sha384-),不匹配就停用
排查 HTML 注释、隐藏路径与残留调试痕迹
攻击者第一件事就是 view-source + 正则搜索 TODO、DEBUG、test、backup、old_。这些不是“看不见”,而是明文躺在 HTTP 响应体里。
- 用命令行快速扫一遍:
grep -r -i "TODO\|DEBUG\|backup\|old_\|test_" ./dist/ | grep -E "\.html?$" - 检查
robots.txt是否意外放行了/dev/、/tmp/、/logs/等目录(哪怕它们当前 404,也暴露了存在意图) - 确认所有
<a href="/admin/"></a>类链接已移除或重定向到 404;静态站不该存在真实/admin/目录,但很多人误留了空文件夹 - 用浏览器打开页面后,在 DevTools 的 Network 面板过滤
html,看响应头是否含X-Powered-By、Server等泄露服务信息的字段——静态托管平台(如 GitHub Pages、Cloudflare Pages)默认不发,若出现说明你用了非标代理或自建 Nginx,得手动删
验证部署环节是否引入供应链风险
静态文件生成过程本身可能埋雷:模板引擎自动注入、CI/CD 脚本拼接恶意 URL、甚至本地 npm 包被投毒。2025 年已有数起通过 marked、highlight.js 衍生包向 HTML 插入隐蔽 script 的事件。
- 检查构建产物中是否含意外的
eval(、new Function(、atob(解码后为 JS 的字符串——这些常用于绕过 CSP - 运行
npx detect-libraries ./dist/index.html(开源工具),识别页面实际加载了哪些第三方库及其版本,比对是否在已知漏洞库列表(如 Snyk 公开 DB)中 - 若用 Hugo/Jekyll/Next.js(SSG 模式),确认
config.yml或next.config.js中没有硬编码测试 API 密钥、或开启devServer相关配置被误打包 - GitHub Pages 用户特别注意:
CNAME文件若被恶意 PR 合并,会直接劫持整个域名解析;建议启用 branch protection + required reviews
真正难防的不是 XSS 或挂马本身,而是“以为静态就等于安全”这种认知偏差。每次上线前花三分钟跑一遍 grep 和 curl -I 看响应头,比事后救火成本低两个数量级。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











