发布无法抓取的文本的技巧
介绍 TuringFonts,一种制作不可抓取和不可复制文本的方法
引言
将敏感信息(例如电子邮件地址、电话号码、个人信息等)发布到公共网站一直是一项复杂的任务,要么是因为搜索引擎通常会索引它们找到的一切(即使我们使用“nofollow”和“noindex”指令),要么是因为总有一些黑客愿意构建网络爬虫,其唯一目标是收集我们想要保护的精确信息。
在思考这个问题时(并且在观看《模仿游戏》之后),我提出了一种简单的解决方案,使文本对计算机可理解但对人类可读。
基本原理
在开发这个解决方案时,我考虑了两个事实
- 搜索引擎和网络爬虫只关心页面的 HTML 代码。通常,它们不会考虑颜色、大小或字体。因此,即使文本不可读,如果我们将白色文本放在白色背景上,它仍然会被索引或抓取。
- 在编写文本时(在网站或文字处理器中),我们可以使用任何想要的字体,而且字体非常灵活。例如,有些字体是符号字体,它们故意完全不可读,因为它们绘制的是图标或符号,而不是字母和数字。
这个想法很简单
- 首先,我们使用简单的替换密码(例如 ROT13)对要保护的文本进行编码。
因此,例如,如果我们想发布我们的电子邮件,而不是编写 johndoe@awesome.com,我们将编写 wbuaqbr@njrfbzr.pbz。 这样,我们的电子邮件就可以免受搜索引擎和网络爬虫的保护,因为它们会错误地认为 wbuaqbr@njrfbzr.pbz 是我们的地址。
- 其次,我们将一种特殊的字体应用于该编码文本,该字体的字母已被打乱,以反转编码文本时进行的替换。
因此,在我们的先前示例中,我们应该使用一种在遇到 '
w
' 时绘制 'j
'、在遇到 'b
' 时绘制 'o
'、在遇到 'u
' 时绘制 'e
' 等的字体。 这样,电子邮件地址对人类来说将清晰可读,但对计算机来说将不可读,因为它们不会考虑使用的字体。请注意,此技术不仅限于网页,它也可以用于 PDF 文件(因为 PDF 文件可以嵌入其中使用的字体),并且它也使文本不可复制(至少在使用剪贴板时)。
Using the Code
为了简化此技术的使用,我在 GitHub 上创建了一个项目,名为 TuringFonts,您可以在其中使用 在线编码器 使用简单的替换密码对文本进行编码,并且可以在 下载一些字体 以“解码”编码文本。
假设您想使用 ROT13 对文本进行编码,并且要将其发布到您的网站。
首先,您必须在 CSS 文件中声明将用于解码文本的字体。
@font-face {
font-family: 'arial_rot13';
src: url('fonts/arial/arial_rot13.eot');
src: url('fonts/arial/arial_rot13.eot?#iefix') format('embedded-opentype'),
url('fonts/arial/arial_rot13.woff2') format('woff2'),
url('fonts/arial/arial_rot13.woff') format('woff'),
url('fonts/arial/arial_rot13.ttf') format('truetype'),
url('fonts/arial/arial_rot13.svg#arialregular') format('svg');
font-weight: normal;
font-style: normal;
}
然后,您将此字体应用于编码文本。
<h2>Encoded text (illegible for both humans and computers)</h2>
<p style="font-family: Arial">Hlnv hvmhrgrev gvcg gszg lmob sfnzmh nfhg yv zyov gl ivzw</p>
<h2>Decoded text (illegible only for computers, readable for humans)</h2>
<p style="font-family: arial_rot13">Hlnv hvmhrgrev gvcg gszg lmob sfnzmh nfhg yv zyov gl ivzw</p>
就这样。它简单、容易且有效。
您可以在 JSFiddle 上查看此示例。