阅盾 ViewShield:一个“只能看、拿不走”的文档分享工具

一个真实的痛点

你有没有遇到过这样的场景?

你要把一份合同、一份融资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/

+1

发表回复