1093 字
5 分鐘
閱後即焚:瀏覽器端加密的私密文本分享站

🔥 在線體驗:https://sealed.ouneed.tech —— 本文中介紹的閱後即焚私密分享站,打开即用。


0. TL;DR:先給結論#

問題結論
這是什麼?一個跑在 Cloudflare Workers + D1 上的閱後即焚文本分享站
怎麼保證隱私?AES-256-GCM 瀏覽器端加密;服務端只存密文;解密密鑰在 URL fragment,不經過服務器
分享鏈接長什麼樣?https://<隨機>.workers.dev/s/xxx#k=xxx —— 中性域名,無身份關聯
能存多大?單條最大 500KB(加密後)

1. 為什麼做這個?#

有時候需要給別人發一段敏感信息:服務器密碼、API 密鑰、一次性憑證。用微信、郵件發,記錄永遠留在聊天記錄裡;用網盤分享,還要註冊登錄。

閱後即焚解決這個問題:發一次,看完就沒了。

市面上有不少類似工具,但要麼要註冊、要麼服務器能看到明文、要麼域名一看就是誰的。自己做一個,乾淨。


2. 安全設計#

2.1 瀏覽器端加密#

核心原則:服務器永遠看不到明文。

  • 寫密箋時,瀏覽器生成 32 字節隨機主密鑰
  • 用 HKDF-SHA256 從主密鑰派生 AES 密鑰和讀取憑證
  • 正文用 AES-256-GCM 加密,AAD 綁定應用標識和鹽值
  • 只有密文、IV、鹽值、憑證哈希上傳到服務器

2.2 密鑰只在 URL fragment#

解密用的主密鑰放在 URL 的 #k= 後面(fragment):

https://s8ded10ec12.x7k2m9q4test.workers.dev/s/xxx#k=yyy

Fragment 不會隨 HTTP 請求發送到服務器——瀏覽器只在本地用它解密。這意味著即使服務器被入侵,攻擊者拿到數據庫也解不開(沒有密鑰)。

2.3 閱後即焚#

  • 可設置 1–10 次領取,默認 1 次
  • 領取時用原子 SQL 操作扣次數,歸零立即刪除記錄
  • 可設置 5 分鐘 / 1 小時 / 24 小時 / 7 天有效期
  • 創建時可生成獨立的撤銷憑證,隨時手動銷毀

2.4 隱私隔離#

分享出去的鏈接用 Cloudflare 的 workers.dev 中性域名:

  • worker 名是隨機字符(如 s8ded10ec12),無含義
  • 賬號子域名也是隨機的(如 x7k2m9q4test),不暴露賬號信息
  • 對方從鏈接反向查不到你的其他站點(博客、郵局、2FA 等)

主站(創建用)是自己的域名,分享鏈接(發出去)是中性域名,兩者隔離。

2.5 額外密碼(可選)#

可以再加一道密碼:密碼參與本地密鑰派生(PBKDF2-SHA256,600,000 次迭代)。即使有人拿到完整鏈接,沒有這個密碼也解不開。建議通過不同渠道發送鏈接和密碼。


3. 技術架構#

純 Cloudflare,不用 R2(文本夠小,D1 完全夠用):

瀏覽器 (加密/解密)
↓ HTTPS (只傳密文)
Cloudflare Worker
↓
D1 數據庫 (存密文 + 元數據)
  • 限流:單 IP 每小時創建 20 條、每分鐘讀取 30 次(D1 原子計數)
  • 定時清理:每天 Cron 刪除過期記錄
  • CSP:嚴格的 Content-Security-Policy,內聯腳本按 SHA256 哈希白名單

4. 使用場景#

  • 給同事發服務器 root 密碼(看完即焚,不留記錄)
  • 分享 API 密鑰給外包(設置 1 次領取 + 1 小時有效期)
  • 傳遞一次性 2FA 恢復碼
  • 任何”只想讓對方看一次”的信息

5. 侷限性(誠實地說)#

  • 不能防止截圖/複製:對方看到內容後可以保存,這是所有類似工具的共同侷限
  • 不保證立即擦除:D1 可能有備份,刪除記錄不代表所有介質立即擦除
  • 信任 Cloudflare:雖然是端到端加密,但前端代碼是從 CF 加載的,理論上存在被篡改的風險(已用 CSP + SRI 緩解)
  • 網絡中斷:領取時如果網絡中斷,次數可能已消耗但內容沒送達(已在界面明確提示)

6. 開源與部署#

代碼基於提示詞由 GPT 生成,我負責部署、UI 美化、安全加固。核心改動:

  • 分享鏈接強制用中性 workers.dev 域名(隱私隔離)
  • UI 美化:配色、漸變、交互細節
  • 修復 CSP 哈希(改代碼後必須重新計算,否則瀏覽器攔截)
  • 補上缺失的 RATE_LIMIT_SECRET 環境變量

部署方式:wrangler deploy,D1 建表,設 Cron,綁自定義域名。全程免費額度搞定。


有敏感信息要傳?試試 https://sealed.ouneed.tech,閱後即焚,片字不留。

閱後即焚:瀏覽器端加密的私密文本分享站
https://blog.ouneed.tech/posts/sealed-burn-after-read/
作者
winter
發佈於
2026-10-17
許可協議
CC BY-NC-SA 4.0