微信小程序支持“阅后即焚”实现方案

0 阅读7分钟

微信搜索【临时阅读】在线体验阅后即焚功能

1. 方案概述

本文针对密码解锁、限时查看、阅后即焚、防截图溯源类微信小程序,给出完整前后端技术架构设计。目前已上线验证,可以搜索【临时阅读】在线体验功能

1.1系统定位

加密限时文件分享工具(非私密聊天),规避“阅后即焚无法溯源”的合规风险,满足国内互联网可追溯、可审计要求,同时实现:

  • 图片/视频/文档加密上传分享

  • 密码解锁访问

  • 设置过期时间、最大查看次数

  • 前端防截屏 + 动态水印溯源

  • 阅后权限销毁、不可二次查看

  • 全链路日志留存、合规可溯源

1.2技术栈

  • 前端:微信原生小程序 WXML + WXSS + JavaScript

  • 后端:Node.js + Express

  • 数据库:MySQL 8.0

  • 文件存储:服务器本地 / 对象存储(OSS/COS)

  • 安全能力:AES加密、动态水印、LSB隐形水印、访问风控、日志审计

2. 整体系统架构(四层架构)

2.1 架构分层

客户端层(微信小程序)

  • 用户授权登录、获取OpenID、设备信息

  • 文件上传、密码设置、有效期/次数设置

  • 密码解锁查看内容

  • 防截屏API、动态全屏水印、禁止长按保存

  • 阅后销毁前端视图,禁止缓存

接口服务层(Express)

  • 登录鉴权、Token签发与校验

  • 文件上传接收、内容审核对接、加密存储

  • 分享链接生成、密码校验、权限校验

  • 访问次数统计、过期自动失效

  • 水印参数下发、风控拦截

数据持久层(MySQL)

  • 用户数据、分享任务数据、访问日志数据

  • 存储加密密钥、过期时间、查看次数、状态

  • 全链路审计日志留存

资源存储层

  • 文件加密存储(密文落地)

  • 服务端动态嵌入隐形水印

  • 过期文件定时清理(合规留存期后)

2.2 核心架构优势(解决行业痛点)

  • 合规安全:不做“无痕销毁证据”,只销毁访问权限,日志全程留存

  • 防泄露闭环:密码权限 + 过期次数限制 + 显性水印 + 隐形溯源水印

  • 小程序过审友好:产品定位为“加密文件分享”,非私密聊天工具

  • 轻量易部署:Node+MySQL运维成本低,适合个人/创业项目落地

3. 核心业务流程设计

3.1 完整业务链路

  1. 用户登录:小程序授权获取OpenID,后端生成唯一用户身份与Token

  2. 上传文件:用户上传图片/视频/文档,设置:访问密码、过期时间、最大查看次数

  3. 后端审核+加密:先内容合规审核,审核通过后AES加密文件,密文存储

  4. 生成分享任务:数据库生成一条分享记录,生成唯一访问ID

  5. 他人访问:输入密码,后端校验密码、是否过期、是否超次数

  6. 展示内容+水印:校验通过后,返回带用户溯源水印的资源,前端开启防截屏

  7. 阅后自动失效:查看完成后次数-1,达到上限立即失效,无法再次打开

  8. 日志留存:记录谁、何时、何设备访问,永久留存审计日志

3.2 关键设计:真正合规的“阅后即焚”

绝对不做:服务端记录彻底删除

只做:访问权限永久销毁

  • 用户无法再打开、无法再次预览、链接彻底失效

  • 但后台访问日志、创建日志、溯源记录全部保留

  • 完美满足监管“可追溯、可取证”要求

4. MySQL 数据库表结构设计(核心三张表)

4.1 用户表 user

CREATE TABLE `user` (
  `id` int PRIMARY KEY AUTO_INCREMENT,
  `openid` varchar(100) NOT NULL COMMENT '小程序openid',
  `nickname` varchar(50) DEFAULT '',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` tinyint DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4.2 分享任务表 share_task(核心业务表)

每一次文件分享对应一条任务,控制密码、过期、次数、状态

CREATE TABLE `share_task` (
  `id` int PRIMARY KEY AUTO_INCREMENT,
  `task_code` varchar(64) NOT NULL UNIQUE COMMENT '唯一访问标识码',
  `user_id` int NOT NULL COMMENT '创建者ID',
  `file_type` varchar(20) NOT NULL COMMENT 'image/video/doc',
  `file_path` varchar(255) NOT NULL COMMENT '加密文件存储路径',
  `file_key` varchar(100) NOT NULL COMMENT 'AES加密密钥',
  `view_pwd` varchar(100) NOT NULL COMMENT '访问密码',
  `max_view_times` int DEFAULT 1 COMMENT '最大查看次数',
  `used_times` int DEFAULT 0 COMMENT '已查看次数',
  `expire_time` datetime NOT NULL COMMENT '过期时间',
  `status` tinyint DEFAULT 1 COMMENT '1正常 0已销毁/过期',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4.3 访问日志表 share_log(合规审计核心)

CREATE TABLE `share_log` (
  `id` int PRIMARY KEY AUTO_INCREMENT,
  `task_code` varchar(64) NOT NULL,
  `visitor_openid` varchar(100) DEFAULT '',
  `visitor_device` varchar(200) DEFAULT '',
  `ip` varchar(50) DEFAULT '',
  `view_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `status` tinyint DEFAULT 1 COMMENT '1成功查看 0访问失败'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5. 后端 Express 核心模块设计

5.1 后端目录结构(生产结构)

/server
  /config      # 配置文件、数据库、密钥、跨域
  /controller  # 业务控制器
  /service     # 加密、水印、文件处理服务
  /model       # MySQL模型
  /router      # 路由分发
  /middleware  # Token校验、风控、日志中间件
  /public      # 加密文件存储
  app.js       # 入口文件

5.2 核心能力模块

  • 小程序登录模块:code2Session 获取 openid,签发自定义Token

  • 文件上传与审核模块:接收文件 - 内容审核 - AES加密 - 落地存储

  • 分享权限模块:密码校验、过期判断、次数限流、状态拦截

  • 阅后销毁模块:访问次数自增,达标自动禁用任务状态

  • 水印生成模块:下发溯源参数,服务端嵌入隐形水印

  • 日志审计模块:所有访问行为强制落库

  • 定时清理模块:定时扫描过期任务,关闭访问权限、清理过期文件

5.3 核心安全设计(后端)

  1. 文件全程密文存储:服务器落地无明文,即使文件泄露也无法直接打开

  2. 密码加密存储:访问密码MD5/SHA256加密存库,不存明文

  3. 动态单次解密:每次合法访问临时解密输出,不暴露原密钥

  4. IP+设备指纹风控:高频异常访问拦截

  5. 强制内容审核:加密前先审核,杜绝违禁内容

6. 小程序前端核心能力设计

6.1 页面结构

  • 登录授权页

  • 创建分享页:上传文件、设置密码、次数、过期时间

  • 密码解锁查看页(核心安全页)

  • 我的分享列表页

6.2 前端安全防护体系

  1. 禁止长按保存:image/video 关闭长按菜单

  2. iOS防截屏API:启用 setVisualEffectOnCapture 截屏隐藏

  3. 全屏动态溯源水印:绑定访客openid+时间+设备

  4. 禁止页面缓存:阅后清空页面数据,卸载资源

  5. 一次性视图:返回后无法二次回看,必须重新解锁(已失效则直接拒绝)

7. 加密与阅后即焚核心逻辑

7.1 文件加密流程

  • 用户上传文件至后端

  • 后端完成内容审核

  • 随机生成AES密钥

  • 文件加密后保存,明文立即销毁

  • 密钥入库绑定当前分享任务

7.2 阅后失效逻辑

  • 用户每成功查看一次,used_times +1

  • used_times >= max_view_times → 任务状态置为0(失效)

  • 过期时间到达 → 自动失效

  • 失效后:所有请求直接返回“内容已销毁”

  • 日志、数据记录永久保留,满足合规

8. 合规与小程序过审方案(重点)

8.1 规避封禁的核心定位

不做私密聊天、不做无痕通讯

产品定位:限时加密文件分享工具

功能描述:密码保护、限时查看、防止随意扩散、泄露溯源

8.2 绝对禁止的话术

禁止:无痕、阅后即焚无记录、秘密聊天、隐匿记录

允许:限时访问、权限销毁、溯源水印、加密保护

8.3 合规底线

  • 所有访问行为100%落库

  • 所有内容先审核、后加密、后分发

  • 不支持匿名非法传播

  • 可随时下架违规内容、追溯责任人

9. 性能与扩展方案

  • 高可用扩展:可将本地文件替换为阿里云OSS/腾讯云COS对象存储

  • 审核扩展:可对接微信内容安全/阿里云鉴黄接口

  • 水印升级:前端动态水印 + 后端LSB隐形水印双重溯源

  • 定时任务:使用 node-schedule 实现过期文件清理

10. 在线体验

本架构是目前小程序阅后即焚类产品最稳、最合规、最容易上线的技术方案。