阿里巴巴内网的不可见水印用的是什么算法?

据说月饼事件截图的那位员工也被开除了? [图片]
关注者
893
被浏览
167,476

23 个回答

在阿里实习的时候,分析过这个东西,当然只是纯好奇技术啦。对外公开内网的信息本身就是不道德的,而且可能触犯保密协议。

首先,第一道防线。看截图这个人是用阿里内外的iOS客户端截的图,且不说截下来的图 PS 能不能完整去水印。在截图操作的瞬间,客户端首先就能感知到你有没有截图。 iOS 有这个 API,Android 也能通过监听截图保存路径实现 ,做过移动端开发的人应该都有所了解。所以你在什么时间、什么页面截了图,其实都能记录下来并上传服务器的。可参考:
RxScreenshotDetector:Android 截屏检测
iOS开发-检测用户截屏, 并获取所截图片

再者,第二道防线。在手机客户端截图是不方便去水印的。水印其实就是写着工号的透明度很高的图片,background-image 的方式平铺满整个屏幕。如果在 chrome里,直接审查元素去掉就行,这样就去除干净了。如果先截了图,再用 PS 去除的话,就有点麻烦了。因为用 PS 去除的话很容易漏掉一些东西,比如工号二进制。

(很多人不理解水印的原理,这里多解释几句,这种高透明度的水印从正面看屏幕的话肉眼很难看到。从屏幕上下斜看,也能隐约看到一些。在 PS 里调下色阶马上就显现出来了。 @Mize 已经做了个类似的效果,就是这样 阿里巴巴内网的不可见水印用的是什么算法? - Mize 的回答 。)

第三道防线,很多人知道这个水印里有工号,但不知道还有工号的二进制。就是用.和/组成的二进制,和工号放在一张图片里。工号的水印调调对比度、色阶,甚至斜着看屏幕就能看到,但是“./”组成的二进制又小又隐蔽,所以用 PS 的话很容易漏掉。

最后一道防线,还记得之前阿里 HR 伪造员工离职谈话的那个风波的时候。即便一个懂前端的程序员去除了水印,最后还是被查出来了,这是为什么?个人推测,可能是根据截图中的评论数、芝麻数等等随着时间变化的数据,反推出截图的时间区间,然后根据时间筛选访问这个帖子的访问日志,缩小范围到几个人,再逐个约谈,大概就能确定了。

很多知友说通过背景色差、文字段落间距、排版什么的就有点太高端了,阿里目前应该不会用到吧……

至于中间人监控员工上网信息,这个不了解还是别不推测了……
继续浏览内容
知乎
发现更大的世界
打开
浏览器
继续
你们别瞎猜了,哪有这么复杂......
就是服务器吐了个带工号的水印,一句 CSS 铺在后面,干掉 background 就好了…

怎奈这个哥们太不小心,用的 PS,唉。

---- update ----

评论指出
- 还原出来的图片非常清晰,所有的工号位置的工号都是完整清晰的
- 那层水印除了可见的工号外,其不可见的部分可能才是玄机所在……

个人认为在颜色中做很难,因为大部分截图工具都会对图片重新编码。
但如果确实存在这样的黑科技,那么本答案没有帮助,希望有内行高人来聊一聊编码和算法 ;)
继续浏览内容
知乎
发现更大的世界
打开
浏览器
继续