零后端的静态网页加密保护工具,用密码把 HTML 变成“自解密页面”
|
admin
2026年8月10日 13:12
本文热度 165
|
StaticShield 是一个零后端的静态网页加密保护工具,通过 AES-256 + PBKDF2 百万次迭代 + HMAC 验签,将 HTML(乃至整站 CSS/JS/图片)加密成一份自解密页面,密码与解密全程在浏览器本地完成,部署到任意静态托管即可实现「门禁式」访问控制。
简单说就是,给网页加一把密码锁,别人打开这个网页文件(HTML)时,看到的只是一个密码输入框,只有输入正确密码,才能看到里面真正的网页内容。
要点
- 加密算法:AES-256-CBC 对称加密(PKCS#7 填充),密钥通过 PBKDF2-SHA256(默认)或 SHA-512 派生,迭代次数高达 1,000,000 次。
- 完整性校验:采用 HMAC-SHA256 的 Encrypt-then-MAC 模式,先验签后解密,防止密文被篡改或 padding oracle 类风险。
- 零后端解密:加密产物为单文件 HTML,部署后密码输入、密钥派生、解密过程全部在访客浏览器本地完成,无需任何服务端支持。
- CLI + Web GUI 双模式:命令行支持单文件/多文件/整站批量加密;本地 Web GUI 提供图形化操作界面,支持多客户端并行。
- 整站打包(--bundle):自动将 HTML 引用的本地 CSS、JS、图片、favicon 等资源内联后再加密,保留原有页面结构与交互。
- 辅助功能完善:支持随机密码生成(CSPRNG)、「记住我」免重复输入、URL Hash 分享链接自动解密、密码提示文案、重叠加密等。
- 部署灵活:产物兼容 GitHub Pages、对象存储、Nginx、CDN 等任意静态托管,甚至可直接用
file:// 本地打开。

部署、使用
安装与环境要求:无需 npm install,仅需 Node.js ≥ 18(利用其内置 WebCrypto),git clone 或直接下载源码即可。
基本使用:
- 加密单个文件:
node encrypt.js page.html(交互输入密码,不回显) - 指定密码与算法:
node encrypt.js a.html -p MyPwd123 --sha512 -d ./dist - 整站打包加密:
node encrypt.js index.html --bundle -p MyPwd123 - 生成随机密码:
node encrypt.js page.html --gen-pwd 12 - 启动图形界面:
node encrypt.js --gui(绑定 127.0.0.1,浏览器访问操作)
安全与使用须知
- 部署环境限制:纯 HTTP 部署会提示需 HTTPS。浏览器 WebCrypto 仅在安全上下文可用,因此加密产物必须通过
https://、localhost 或直接双击本地打开(file://)才能正常解密。 - 不可逆性:工具无后端,密码不存储于任何服务器,PBKDF2 为单向派生。丢失密码即内容无法恢复,无法找回。
- 防护边界:浏览器端解密意味着密文会下发到客户端,属于「门禁式」访问控制(防直接查看/抓取),不构成对资深逆向者的绝对防护。绝密内容请使用更强的方案。
- 同源与公共环境风险:「记住我」功能会将派生密钥材料存在本机
localStorage,可被同源脚本读取。若同一托管域下存在 XSS 或托管了其他页面,存在被跨页读取的可能;高敏感场景及公共设备请勿勾选
项目由 wangshengithub 开发,采用 MIT 协议,当前 114 Stars。
❝项目地址:https://github.com/wangshengithub/staticshield
阅读原文:点击这里
该文章在 2026/8/10 13:14:09 编辑过