自建一次性秘密分享平台OTS:完整部署与使用指南
本周介绍一个充满趣味的新项目,具备阅后即焚功能。该项目在GitHub上的完整名称为Luzifer/OTS。

简单来说,OTS类似于QQ闪图和纸飞机应用中的消息过期自动删除机制。关于其具体应用场景,读者可以在了解完整内容后自行决定是否部署,只能说在某些特定情境下具有巧妙用途。
值得一提的是,另一款类似工具加密鸽(cupcakearmy/cryptgeon)也获得了较高关注度,有兴趣的读者可以进一步了解。
https://blog.ydxian.xyz/archives/cryptgeon
项目概述
OTS是一个专为一次性秘密分享设计的平台:它在浏览器端采用对称256位AES加密技术,将敏感信息加密后再传输至服务器。服务器从未接触明文数据,且在秘密被读取一次后立即将其删除。
核心特性
在客户端(浏览器端)使用AES-256加密算法处理机密内容,确保原始数据在发送至服务器前就已加密。
服务器始终未接收未加密的明文,因此即使服务器遭受攻击,也无法轻易解密已存储的内容。
机密链接仅支持单次访问:读取后该秘密会立即从存储中移除,防止多次查看或长期留存。
支持通过命令行工具(CLI)或脚本化操作来创建和获取秘密,便于自动化流程集成。
提供多种后端存储选项(如内存或Redis),实现灵活部署配置。
链接格式将“秘密ID与密码”合并到URL的fragment部分(#后内容),由于服务器无法读取fragment,密码不会被传输。
安装与配置
以威联通NAS为例,通过Docker Compose方式完成部署。
熟悉技术的用户可前往项目页面阅读Wiki自行构建,本文直接使用官方镜像进行演示。
部署代码如下:
services: app: image: ghcr.io/luzifer/ots:latest container_name: ots restart: always environment: # Optional, see "Customization" in README # CUSTOMIZE: '/etc/ots/customize.yaml' # See README for details REDIS_URL: redis://redis:6379/0 # 设置每个秘密的存活时间,案例168h=1周后过期 SECRET_EXPIRY: "604800" # "mem" or "redis" (See README) STORAGE_TYPE: redis depends_on: - redis ports: - 3355:3000 # 冒号左侧自定义
redis: image: redis:latest # 镜像加速正确填写 # image: docker.20040311.xyz/library/redis:latest container_name: ots-redis restart: always volumes: - /share/Container/ots/data:/data # 冒号左侧自定义
REDIS_URL参数指示OTS连接Redis数据库的位置。这里的redis指代下方services中Redis容器的名称,6379是Redis默认端口,/0表示使用第0号数据库。
STORAGE_TYPE用于选择数据存储方式。另提供mem选项,数据仅保存在内存中(容器重启后数据清空)。
打开威联通NAS的Container Station应用,创建新的应用程序实例。

功能演示
按照上述代码部署后,正常情况下可通过浏览器输入NAS_IP:3355访问服务。但非HTTPS访问会被禁止创建秘密,因此内网环境也需配置SSL证书(本文未进行相关测试)。
本文示例中已配置反向代理。界面支持输入文本内容并添加附件,同时可设置过期时间。即使秘密未被查看,过期后也会自动销毁。

创建完成后会生成一个分享链接。右侧提供复制、二维码分享和立即销毁功能按钮。

秘密被查看后,系统会显示相应提示信息。

总结与应用场景
总体而言,OTS的功能直观且易于使用。此外,它还能作为可集成服务组件,其设计初衷在于将一次性秘密分享能力无缝嵌入到各类系统或服务中。例如,可用于自动发送临时密码、支持开发运维(DevOps)流程、企业内部工具整合、客户支持与远程协助等场景。更多高级应用和自定义功能留给读者进一步探索和实践。