为什么坚持纯静态

· 技术

最近一年博客程序、评论系统、后台面板的漏洞一个接一个。个人博客没人值守,出了洞往往几个月后才发现。最省心的办法是根本不运行服务器端代码。

纯静态意味着什么

  • 线上只有 HTML、CSS、JS 和图片文件,没有数据库、没有登录、没有上传接口。
  • 生成网站的工具只在自己电脑上运行,线上环境里没有它。
  • 托管在对象存储或 CDN 上,攻击面就是托管商本身。

这个站点额外做的事

  • 不加载任何第三方脚本、字体或统计代码,所有资源同源。
  • 没有内联脚本,也没有内联样式,可以配一条很严格的内容安全策略(CSP)。
  • 每个脚本和样式表都带子资源完整性校验(SRI),文件被篡改浏览器就拒绝执行。
  • 不用 npm 依赖树。生成器用 Hugo,它是一个单独的二进制文件。

部署到 Cloudflare Pages 或 Netlify 时,站点根目录的 _headers 文件会让托管商附上这些响应头:

/*
  Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'; upgrade-insecure-requests
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin
  Permissions-Policy: camera=(), microphone=(), geolocation=()

GitHub Pages 不能自定义响应头,所以页面里同时放了一份 <meta> 形式的 CSP,作用相同,只是少了 frame-ancestors。

评论可以交给邮件,或者干脆不要。少一个功能,就少一个要盯着打补丁的地方。

← 液态玻璃博客