清理复制的文本
从网站、PDF、Word 文档粘贴的文本常带有零宽空格和软连字符,会破坏搜索和匹配。粘贴到这里,剥离它们,复制干净的文本回去。
文字工具
粘贴文本,检测器会高亮它找到的每一个不可见 Unicode 字符:零宽空格、连接符、方向标记、软连字符,每个都标注码点。
不可见 Unicode 字符的存在都有正当理由:换行控制、连笔文字连接、双向文本、可选连字符。但因为它们渲染为空,它们也是滥用的工具。Trojan Source 论文(CVE-2021-42574,2021 年 10 月披露)显示,双向覆盖字符能让源代码的编译结果与屏幕上读到的不一样。配套披露(CVE-2021-42694)涵盖同形字攻击,即用西里尔字母 а(U+0430)替换函数名里的拉丁字母 a(U+0061)。更贴近日常的情况是,零宽字符被植入用户名和标识符,让两个看起来一模一样的字符串比较结果为不同。按码点把这些字符标出来的检测器,是找到它们最快的方法,因为肉眼根本看不见。
从网站、PDF、Word 文档粘贴的文本常带有零宽空格和软连字符,会破坏搜索和匹配。粘贴到这里,剥离它们,复制干净的文本回去。
两个读起来都是「admin」的用户名,如果其中一个含 U+200B,就是不同的字符串。任何可疑标识符在信任比较结果之前,都过一遍检测器。
双向覆盖字符(U+202A 到 U+202E)能在看起来正确的代码里藏逻辑。阅读来自不受信任来源的任何代码片段之前,先粘贴进来扫一遍。
IDN 同形字攻击用易混淆字符注册看起来相似的域名。检测器不会解析域名,但会标出 URL 文本里隐藏的不可见字符。
上面列出的六个字符最常见,但不是全部。彻底的扫描要覆盖多个范围。零宽格式字符 U+200B 到 U+200F 涵盖换行机会、连接符和方向标记。U+2060(字连接符)和 U+FEFF(字节顺序标记,出现在流中时)也是零宽。双向覆盖区块(U+202A 到 U+202E,加上 U+2066 到 U+2069)正是 Trojan Source 利用的部分。U+00AD(软连字符)在换行前不可见。谚文填充 U+115F 和 U+3164 以及盲文空白 U+2800 渲染为空但占一个单元,这让它们适合在明面上隐藏内容。易混淆字符检测是相关却独立的问题:西里尔字母 а 和拉丁字母 a 都可见,所以字符检测器不会标记它们。要查这个,需要对 Unicode 的 confusables 数据做比对,它把看起来相似的字符映射到一个归一化的骨架。
检测器完全以 JavaScript 在你的浏览器里运行。任何文本都不会离开你的设备,这一点在你粘贴敏感标识符或源代码时很重要。它在 Chrome、Firefox、Safari、Edge 以及桌面或移动端的任何现代浏览器里都能用。它扫描 U+200B 到 U+200F 范围内的零宽字符、U+202A 到 U+202E 和 U+2066 到 U+2069 的双向覆盖字符、字连接符 U+2060、软连字符 U+00AD,以及出现在文件首位置之外的 U+FEFF 字节顺序标记。注意它按码点标记不可见字符,不检测同形字。同形字是看起来像其他字符的可见字符。
任何渲染时没有可见字形的 Unicode 字符。常见的有零宽空格(U+200B)、零宽连接符(U+200D)、零宽非连接符(U+200C)、从左到右和从右到左标记(U+200E、U+200F)、软连字符(U+00AD)。检测器按码点逐一标记。
三个常见来源。从网页或 PDF 复制会带入源里的不可见字符。编辑器或 CMS 插入它们用于换行控制。或者有人故意植入,为了水印、排版,或让标识符比较结果不同。
本身不危险。但在代码、用户名和 URL 里,它们能改变文本的解析方式。Trojan Source 攻击(CVE-2021-42574)用双向覆盖字符让编译器读到的逻辑与评审者看到的不一样。在用户名里,隐藏的 U+200B 让两个看起来一模一样的字符串比较为不同。
粘贴文本,点击分析,再点击移除隐藏字符。工具剥离它检测到的每一个不可见字符,保留可见文本。用复制干净文本把结果拿回去。
不会。检测器完全以 JavaScript 在你的浏览器里运行。不上传任何东西到服务器,所以用于源代码、凭据或任何不能分享的文本都是安全的。
不能。同形字是可见字符。西里尔字母 а(U+0430)看起来和拉丁字母 a(U+0061)一模一样,但两者都正常渲染。本工具标记的是不可见字符。检测易混淆字符需要对 Unicode 的 confusables 数据做比对,它把看起来相似的字符映射到一个归一化的骨架。