注意不可见的Unicode,可能会有极大风险。

眼见为实?也许并不那么简单。

在数字世界里,你的一切行为,可能都不简单,甚至危机四伏!

通过下面的例子,我们看看,最简单的文字信息可能会有怎样的风险,我们展示对话双方微信的截屏:

左面是苦主小冤大头的手机截屏(iPhone): 右面是黑心借款人的手机截屏(华为):

双方显示的金额是不一样的!!

神奇吗?恐怖吗?你眼中的28000 在人家的手机上就是 82000.

要说明的是:这不是PS,这不是魔术!也不是手机鄙视链!100%可以再现!

你看见的东西,也许并不是那么真实,或者说,它是100%真实的,不过不是你理解的那样

我们说眼见为实,就是我们应该只相信看见的东西,但实际上,你看见了吗?诚然,你的眼睛没问题,但是你的(善良而简单的)眼睛看不见所有的东西。

上面的例子里面,你觉得是哪里出了问题?

  1. 手机系统问题,

  1. 微信做了过滤、替换(和谐?);

  1. 眼睛(脑子)坏了

偶然发现这个现象的时候,我们的反应是跟您一样的,一定是小概率的错误,甚至怀疑是程序员的玩笑或者彩蛋。

我们求证的过程是:

1.把发生错误的文字拷贝到notepad(一个最简单的编辑软件),再重新黏贴出来,通常这样能去掉一些不可见的格式和非文本(比如颜色、字体,这些在notepad里面都没有)。结果依然没有变化。

更诡异的事情是:

你只要把这段话贴在微信的编辑区,即使没有发送,内容就已经不一样了!

QQ上也是如此。

2.继续尝试,换掉文中发生错误的文字,(实际上用你输入的任何其他文字)都没发生这个现象,只是和原来的那一段(有毒)的文字有关,那么再来审视这句神奇的文字吧。

贴到Word、Excel中,发现显示不正常,在Word中几乎不能编辑,真有毒:

只能再进一步,用码农利器VSCode看看:

这下秒懂了!

这里面原来藏着两个不可见的Unicode字符 U+202E和U+202C(准确地说是UTF-8,至于UTF-8请自行度娘),我们先去去看看这个U+202E和U+202C 是何方神圣?

关于Unicode,可移步:

统一码_百度百科 (baidu.com)

这两个码是在Unicode 的官方文档里面有说明:

Unicode - Unicode 字符百科 (unicode-table.com)

What?这个202E能够让字符从右向左排?ABC 变成 CBA?

更可笑(幽默)的是,网站上自己直接做了个示范:

而202C是取消这个格式,恢复原来的从左向右,防止一直从右向左。

脑补一下:Unicode是一个非常严格的字典(对照表),它几乎把所有目前各国的语言文字中的字、字母、常用符号都编了码,(但是东亚的古文字应该不在其中),如果不是各国各地各种软件普遍接受Unicode字典,全球不同语言环境下的沟通是不可能的。

比如:中文的“一”是Unicode中第一个中文字,其代码是:4E00,差不多是第19968个字符。

只有普遍接受这个Unicode字符集,我们才能轻易地从中文电脑上写出泰国人能看懂的泰文信,老外电脑也能显示我们的中文字符。甚至常见的表情符号(emoji),都是在Unicode里面定义的(ὠ0是1F600)。Unicode每年都会吸收新的字(符号)进去,因为Unicode可以容纳114112个字符,至少现在看起来是足够了。

但是真的所有人都明白上面这个淘气鬼(U+202E),从右向左强制格式符吗?为什么会有这个错误呢?

这个错误的出现,就是因为大家(各种软件和系统)没有达成一致。显然,windows、安卓、苹果的操作系统对Unicode的支持和容忍(所谓容忍:是说,我虽然看不懂你,但是我不清除你)是不一致的。

我们的分析,Windows和安卓是按照Unicode的本意进行了格式化,也就是进行了从右向左的排列,但是苹果完全忽略了这个格式符。可以想象,其他的操作系统和软件(是的,软件可能会有自己的过滤机制,比如word和excel就不一样),都可能出现不一样的处理方式。

那么问题就来了。

如果我从安卓手机发送的一条:“2万8“的信息中暗藏了格式符,其转义的意思应该是8万2,而在接收方的苹果手机上,由于忽略了格式符,显示出来就可能变成了“2万8”,苹果手机用户发送回这一条时,安卓手机上又变成了8万2。而且,由于发送手机的截屏和接收手机的截屏是不一样的(虽然信息是同一条),这就可能被坏人利用。这时,单方的截屏作为法律证据就完全不可信了。

是否还有更危险更隐蔽的方式?也许,我就不能在这里示范了,你懂的。

基于这个发现,我们有几点建议:

  1. 建议和各厂商统一对Unicode的处理方式;

  1. 对即时通信类应用,应约束对不可见Unicode的支持。毕竟超出了大部分人的应用场景。

  1. 向法律界提醒,单方的截屏作为证据,其可信度存疑。甚至云端的记录也不可信。

  1. 对普通用户来说,提高风险意识,在网络上不要无脑复制黏贴转发。

更深一步的思考:在数字世界里,存在不同的认识层次。文字看起来最直白,但是这个例子表明了,文字也可能不那么简单。

推广到语音、图片和视频,牵涉到更多话题:语音和图片是否经过篡改?是否侵犯了他人的知识产权?其复杂性又是文字所不能比拟的。这正是我们团队正在进行的研究方向之一:数字水印技术。我们研究的目的就是保护原作者的知识产权、防止篡改和侵权,同时让使用者留下痕迹,防止抵赖。

如果帖子中技术成分有点多,或者技术上有偏颇,都请谅解。我通过这个例子只为了说明:眼见并不为实。

在简单的文字下面,可能是个陷阱。同样在网上转来转去的视频和图片中,又有多少是真实的呢?

原帖:眼见并不为实!注意你的聊天记录! - 知乎 (zhihu.com)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值