vevc/prism
GitHub: vevc/prism
基于 Cloudflare Snippets 的 HMAC 签名反向代理,通过密钥校验实现安全的动态域名转发,附带签名计算器和订阅转换工具。
Stars: 1 | Forks: 0
# Prism
基于 Cloudflare Snippets 的 HMAC 签名反向代理,用于安全的动态域名转发。
只有携带合法签名的请求才会被转发到目标域名,避免开放代理被滥用。仓库中还附带签名计算页与订阅转换 Worker,方便日常使用。
## 核心:签名代理(`snippet.js`)
请求需携带两个查询参数:
| 参数 | 含义 |
|------|------|
| `d` | 目标域名 |
| `t` | 对 `d` 的 HMAC-SHA256 签名(hex) |
校验通过后,会把请求的 `hostname` 改写为 `d` 并透传(支持 WebSocket)。
示例:
https://your-proxy.example.com/path?d=api.example.com&t=
### 签名算法
t = HMAC-SHA256(SECRET_KEY, d) → hex
- `message`:目标域名字符串(即 `d`)
- `key`:与 Snippet 中配置的 `SECRET_KEY` 相同
- 输出:十六进制字符串(大小写均可)
### 部署 Snippet
1. 打开 Cloudflare Dashboard → 对应域名 → **Rules** → **Snippets**
2. 新建 Snippet,粘贴 `snippet.js`
3. 将文件顶部的 `SECRET_KEY` 换成长度不少于 32 位的高强度随机字符串
4. 配置触发规则,使需要走代理的流量命中该 Snippet
### 响应状态
| 状态 | 含义 |
|------|------|
| `400` | 缺少 `d` 或 `t` |
| `403` | 签名校验失败 |
| `500` | 运行时异常 |
## 附带工具
### 1. 签名计算器(`docs/index.html`)
本地计算 `t`,并可选拼出完整代理 URL。密钥只在浏览器中使用,不会上传。
可部署到 GitHub Pages(仓库 **Settings → Pages**,Source 选分支,Folder 选 `/docs`)。
访问地址一般为:
https://.github.io//
### 2. 订阅转换(`converter.obf.js` / `converter.js`)
单文件 Cloudflare Worker:提供网页 UI,将 VLESS 订阅链接改写为经过 Prism 代理的新链接。
主要行为:
- 支持明文多行链接或 base64 订阅内容
- 仅处理 VLESS;其他协议在前端忽略并提示
- UUID 在提交前脱敏,结果返回后再还原
- 使用 Worker 环境变量 `SECRET_KEY`、`PROXY_DOMAIN` 生成签名并替换域名 / sni / host,在 path 中追加 `d`、`t`
部署时**优先使用** `converter.obf.js`。该版本已去掉源码中的 `vless` / `uuid` 等明文关键字;直接部署可读版 `converter.js` 时,Cloudflare 可能因关键词审查导致 Worker 运行出现 **1101** 错误。
1. Cloudflare Dashboard → Workers → Create → 粘贴 **`converter.obf.js`**
2. Settings → Variables:
- `SECRET_KEY`:与 Snippet 中密钥一致(建议 Secret)
- `PROXY_DOMAIN`:代理入口域名,如 `your-proxy.example.com`(不要带协议或路径)
3. Deploy 后访问 Worker 地址即可使用
`converter.js` 为可读源码,便于本地阅读与修改;线上部署请使用 `converter.obf.js`。
## 项目结构
prism/
├── snippet.js # 核心:HMAC 签名反向代理(Cloudflare Snippets)
├── docs/index.html # 附带:签名计算器(可部署 GitHub Pages)
├── converter.obf.js # 附带:订阅转换 Worker(推荐部署)
└── converter.js # 订阅转换可读源码
## 安全说明
- `SECRET_KEY` 是整套系统的信任根,泄露后任何人都能签发合法代理请求
- Snippet 与 Converter 必须使用同一密钥,否则转换出的链接无法通过代理校验
- 签名计算器适合个人本地使用;不要把真实密钥写进公开仓库或静态页面源码
标签:HMAC签名, Serverless, VLESS, 代理工具, 反向代理, 数据可视化, 程序员工具, 自定义脚本