2023-11-14
技术文档
00

目录

发现
零宽字符
常见的零宽字符
不换行空格
零宽不连字
零宽连字
零宽字符的作用
数据防爬
信息传递
传递隐密信息
隐形水印
加密信息分享
逃脱敏感词过滤

发现

最近在公司的工作中需要替换一个多语言的翻译,两百多个翻译手动替换属实是累得慌,人生苦短我用python,撸了一个替换翻译的脚本跑了一下,由于翻译的内容是泰语,不敢掉以轻心就用pycharm的文件比对对比了一下替换前后的文件,让我发现了一个非常奇怪的东西:zwsp

image.png

零宽字符

研究一下,原来这串字符,有个名字叫Zero-width space,简称ZWSP,翻译过来就是"零宽空格",它是一种不可打印的Unicode字符,就是一般情况 肉眼不可见。就是比较巧的我用比对的时候发现了。

这种字符的出现是为了文字控制排版作用的,但是由于它拥有肉眼无法观察到的特性,零宽度字符可作为识别某些用户身份的"指纹"数据,也可非常方便地追溯到某些秘密数据的泄露源。

常见的零宽字符

不换行空格

全称No-Break Space,它是最常见和我们使用最多的空格,大多数的人可能这个字符叫做Zero Width Space,中文可称为"零宽空白",这个字符在主流文本编辑器中均没有任何显示效果,就像一只看不见、摸不着的幽灵。拷贝也会带上零宽空白,HTML字符值引用为:​

零宽不连字

不换行空格,全称No-Break Space,它是最常见和我们使用最多的空格,大多数的人可能它叫零宽不连字,全称是Zero Width Non Joiner,简称"ZWNJ",是个不打印字符,放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。Unicode中的零宽不连字字符映射为(zero width non-joiner,U+200C),HTML字符值引用为:‍‌

零宽连字

全称是Zero Width Joiner,简称"ZWJ",是个不打印字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个本不会发生连字的字符产生了连字效果。零宽连字符的Unicode码位是U+200D,HTML字符值引用为:‌‍

零宽字符的作用

数据防爬

将零宽度字符插入文本中,干扰关键字匹配。爬虫得到的带有零宽度字符的数据会影响他们的分析,但不会影响用户的阅读数据。

信息传递

将自定义组合的零宽度字符插入文本中,用户复制后会携带不可见信息,达到传递作用。

传递隐密信息

利用零宽度字符不可见的特性,我们可以用零宽度字符在任何未对零宽度字符做过滤的网页内插入不可见的隐形文本。

隐形水印

通过零宽度字符我们可以对内部文件添加隐形水印。在浏览者登录页面对内部文件进行浏览时,我们可以在文件的各处插入使用零宽度字符加密的浏览者信息,如果浏览者又恰好使用复制粘贴的方式在公共媒体上匿名分享了这个文件,我们就能通过嵌入在文件中的隐形水印轻松找到分享者了。

加密信息分享

通过零宽度字符我们可以在任何网站上分享任何信息。敏感信息的审核与过滤在当今的互联网社区中扮演着至关重要的角色,但是零宽度字符却能如入无人之境一般轻松地穿透这两层信息分享的屏障。对比明文哈希表加密信息的方式,零宽度字符加密在网上的隐蔽性可以说是达到了一个新的高度。仅仅需要一个简单的识别/解密零宽度字符的浏览器插件,任何网站都可以成为信息分享的游乐场。

逃脱敏感词过滤

通过零宽度字符我们可以轻松逃脱敏感词过滤。敏感词自动过滤是维持互联网社区秩序的一项重要工具,只需倒入敏感词库和匹配相应敏感词,即可将大量的非法词汇拒之门外。使用谐音与拼音来逃脱敏感词过滤会让语言传递信息的效率降低,而使用零宽度字符可以在逃脱敏感词过滤的同时将词义原封不动地传达给接受者,大大提高信息传播者与接受者之间交流的效率。

本文作者:Yaki

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!