一个真实的痛点
你有没有遇到过这样的场景?
你要把一份合同、一份融资BP、或者一份设计方案发给外部合作方看。直接发 PDF 文件吧,对方可以随手转发给第三个人、第四个人,你完全不知道文件最终流到了谁手里。
发之前想加个水印?麻烦。想限制对方不能打印、不能下载?更麻烦。就算加了水印,对方截个图发出去,你也不知道是谁截的。
我就想要一个这样的工具:把文档链接发给对方,对方只能在线看,每一页上都带着他自己的名字和手机号。如果他截图泄露了,我一查就知道是谁干的。
这就是 阅盾 ViewShield——一个在线 PDF 安全预览系统。
它是怎么工作的?
用一句话概括:把 PDF 变成一张张图片来展示,每张图片上都印着查看人的身份信息。
整个流程分三步:
第一步:上传文档
你登录系统后,把 PDF 文件上传上去。系统会在后台把 PDF 的每一页转换成图片,然后把原始 PDF 文件删掉——系统里不再存在可以下载的原始文件。
第二步:生成分享链接
文档准备好之后,你点”分享”,系统会生成一个专属链接。你把链接发给对方就行,就像分享一个网盘链接一样简单。
第三步:对方查看
对方打开链接后,系统会要求他先登记:你叫什么名字?手机号是多少?
登记完之后才能看到文档内容。而文档的每一页上,都密密麻麻地印着这个人的名字、手机号、查看时间和 IP 地址——这就是水印。
水印是”烙”在图片里的,不是浮在页面上的一层遮罩,没法通过技术手段去掉。
为什么这样设计?
为什么不直接发 PDF?
因为 PDF 发出去就失控了。对方可以转发、打印、截图,你什么都做不了。
阅盾 ViewShield 的做法是从源头上就不给你原始文件。你看到的只是图片,而且每张图片上都带着你的身份信息。
水印为什么印在图片里,而不是浮在页面上?
有些文档工具也会加水印,但只是在页面上盖一层半透明的文字。懂技术的人打开浏览器开发者工具,一秒钟就能把这层水印删掉。
阅盾 ViewShield 的水印是在服务器端直接”画”进图片像素里的。你拿到的就是一张带水印的图片,没有任何办法把水印分离出去。
为什么要登记姓名和手机号?
因为水印上需要显示这些信息。系统不是在”收集你的隐私”,而是在告诉你:你看了这份文档,你的身份就和这份文档绑定了,请对自己的行为负责。
这是一种威慑。绝大多数人在知道自己的身份会被印在每一页上之后,都不会再去截图传播。
除了水印,还做了哪些保护?
阅盾 ViewShield 在预览页面上还做了多重防护:
- 右键菜单被禁用了——不能”图片另存为”
- Ctrl+S、Ctrl+P 被禁用了——不能保存、不能打印
- 拖拽图片被禁用了——不能把图片拖到桌面
- 打印功能被禁用了——按 Ctrl+P 什么都不会发生
- 手机上长按也被禁用了——不能长按保存图片
- 截屏键被拦截了——按 PrintScreen 时页面会短暂隐藏
当然,作为一个开发者,我要诚实地说:这些前端防护不是万能的。用户总是可以用另一台手机对着屏幕拍照。但 阅盾 ViewShield 的核心安全不依赖这些前端手段——真正管用的是水印 + 审计日志:
- 每页图片上都有查看人的身份信息(水印)
- 系统记录了谁在什么时间、从哪个城市、看了哪些页(审计日志)
一旦文档泄露,拿着截图上的水印信息一查,就能锁定是谁泄露的。
文档所有者自己看是什么样的?
如果你是文档的上传者,你自己预览的时候看到的是干净的原图——没有水印,因为不需要追溯自己。
只有别人通过分享链接查看时,才会看到带水印的版本。
分享链接可以管理吗?
可以。你可以看到每个分享链接的:
- 有多少人看过
- 总共被查看了多少次
- 每个查看人的姓名、手机号、IP、查看时间
如果你觉得某个链接不需要了,随时可以关闭它。关闭后,对方再打开就会看到”链接已失效”。
开发过程中的一些思考
为什么不用现成的方案?
市面上不是没有类似产品,但要么是企业级方案(贵、部署复杂),要么是简单的密码保护(没有水印追溯)。我想要的是一个轻量、好用、带身份水印的工具,于是决定自己做。
技术选型上的取舍
这个项目没有用 React、Vue 这些流行的前端框架,而是用了 htmx + Alpine.js 这样的轻量方案。原因是 ViewShield 本质上是一个服务端驱动的应用——核心逻辑在 PHP 后端(文件转换、水印生成、权限控制),前端只需要做一些简单的交互(翻页、缩放、轮询状态)。用重框架反而是杀鸡用牛刀。
“绝对安全”是个伪命题
我从一开始就没打算做一个”绝对防拷贝”的系统,因为那在技术上不可能。阅盾 ViewShield 的思路是威慑 + 追溯:
- 让正常用户获得流畅的预览体验
- 让想泄露的人有所顾虑(”我的名字印在上面呢”)
- 万一真的泄露了,能追查到是谁
这比追求一个不存在的”绝对安全”要务实得多。
效果怎么样?
目前 阅盾 ViewShield 已经部署上线,运行在 viewshield.ivup.cn。核心功能全部可用:
- 上传 PDF → 自动转图片
- 创建分享链接 → 发给对方
- 对方登记信息 → 查看带水印的文档
- 所有者查看审计日志 → 掌握所有查看记录
整个流程顺畅,水印清晰,安全防护到位。
未来可以做什么?
当前版本实现了核心能力,后续还可以扩展:
- 链接有效期——分享链接 7 天后自动失效
- 密码保护——打开链接还需要输入密码
- 查看次数限制——同一个链接最多看 3 次
- 批量上传——一次传多个文档
- 管理后台——全局查看所有用户和文档
写在最后
ViewShield 是我完整独立开发的一个项目,从产品设计、数据库设计、后端逻辑、前端交互到部署上线,一个人全包。
做这个项目的最大收获是:好的安全产品不是要造一堵攻不破的墙,而是要让想翻墙的人觉得”不值得”。 当泄露的成本(被追溯到)远大于收益时,安全自然就实现了。
如果你也有文档安全分享的需求,欢迎试用 阅盾 ViewShield。http://viewshield.ivup.cn/