设计网站中的“时间胶囊”功能需要结合用户数据的存储、时间验证、隐私保护和用户体验等多方面因素。下述是分步实现方案和关键考虑点:
输入内容:支持文本、图片、视频、文件上传。
设置解锁时间:用户选择未来日期(需限制最短/最长时间如1天~10年)。
权限设置(可以选):
仅自己可以见。
分享链接(通过URL或密码访问)。
加密选项:用户可以设置密码(二次验证)。
数据库结构(示例):
CREATE TABLE time_capsules ( id VARCHAR(36) PRIMARY KEY, -- 唯一标识(UUID) user_id VARCHAR(36), -- 关联用户ID(如已登录) content BLOB, -- 加密后的内容 unlock_time TIMESTAMP, -- 解锁时间(UTC时间) status ENUM('locked', 'unlocked'), -- 状态 password_hash VARCHAR(64), -- 密码哈希(可以选) share_token VARCHAR(64), -- 分享链接唯一令牌 created_at TIMESTAMP );
文件存储:使用云存储(如AWS S3),文件名关联数据库ID,文件内容加密。
方案1 - 定时任务轮询:
每小时运行一次后台脚本,检查 unlock_time <= NOW()
的条目,标记为 unlocked
。
方案2 - 实时验证:
用户访问胶囊时检查时间,不依赖后台任务(更节省资源)。
通知用户:发送邮件或站内信提示“您的胶囊已解锁”。
身份验证:
用户登录后查看自己创建的胶囊。
通过分享链接(/capsule/:share_token
)访问可选密码验证。
内容解密:使用AES-256解密数据库中的内容或文件。
加密存储:在服务器端使用对称加密(如AES-256)加密内容,密钥由用户密码或系统主密钥派生。
传输安全:全程HTTPS,敏感操作(如密码设置)加盐哈希(bcrypt)。
统一时区:数据库存储UTC时间,前端按用户本地时区显示倒计时。
防篡改:后端严格校验时间,禁止通过API修改unlock_time
。
倒计时组件:显示“距离解锁还剩X天”使用JavaScript动态更新。
内容展示页:解锁后渲染解密内容(富文本/图片预览/视频播放器)。
预览功能:允许用户创建后预览内容(需二次确认)。
修改/删除:在解锁前允许用户修改元数据(如时间、权限),解锁后仅允许查看。
数据清理:解锁后保留7天,逾期自动删除云存储文件及数据库记录。
多用户胶囊:允许多个用户贡献内容,通过邀请链接共同创建。
提前解锁:用户提交身份验证(如短信/邮件验证码)后强制解锁。
法律合规:管理员接口可以配合法律要求提供数据访问。
前端:React/Vue + Day.js(时间处理) + CryptoJS(客户端加密)。
后端:Node.js/Python + Express/Django + PostgreSQL/MongoDB。
存储:AWS S3(加密存储) + CDN加速大文件访问。
定时任务:Celery(Python)或 AWS Lambda Cron。
通知:SendGrid(邮件) + Twilio(短信)。
数据泄露:定期审计加密流程,使用HSM(硬件安全模块)管理密钥。
滥用风险:限制同一用户/IP的创建频率,内容审查(如防暴恐/色情)。
法律风险:明确用户协议,声明数据所有权和合规删除策略。
通过上述设计,时间胶囊功能可以在保证安全性的前提下为用户提供有趣且可以靠的内容保存体验。核心在于平衡自动化(定时任务)与实时验证、数据安全与用户体验。