如何保护手机号码免受机器人攻击

11

我希望公开页面上显示的电话号码得到保护。例如,将电话号码字符转换为HTML实体,使机器人无法以纯文本形式获取该号码。请告诉我这个技巧。

(Note: I have retained the HTML tags in the translated text as requested.)

http://www.alistapart.com/articles/gracefulemailobfuscation/ - Haim Evgi
7
请记住,您在这里进行的任何混淆可能会影响使用屏幕阅读器的人。 - Paddy
使用BASE64编码对电话号码进行编码,并显示编码文本以及有关编码的信息。这是我用来防止机器人(和文盲)的方法:P - shivams
6个回答

7

这只是一个想法,虽然我不确定它有多实用:

<span class="protectedNumber" title="01234567890"></span>

CSS:

span.protectedNumber:before {
    content: "Phone number: " attr(title);
}

JS Fiddle演示


编辑:回应评论中的“跨浏览器?”问题,添加了jQuery选项,以协助那些不能处理CSS生成内容的浏览器。

$(document).ready(
    function(){
       $('.protectedNumber').each(
           function(){
               $(this).text('Phone number: ' + $(this).attr('title'));
           }); 
    });

简单而美观,但跨浏览器兼容? - Blur
我将使用这个方法。谢谢David。 - Blur
2
不错!但是一个好的收割机应该能够收割数字,因为大多数数字都有一定的长度、起始等特征。我想使用验证码图像来保护您的电话号码会更安全。 - Alfred

4

一些想法

  • 将电话号码显示为图像
  • 使用JavaScript创建并显示电话号码
  • 在数字之间插入HTML标记(例如[span]),这在视觉上没有任何区别,但使机器人更难识别电话号码

+1 表示添加 HTML 标签。这是一个非常简单的方法,我不确定机器人有多么复杂,但它可能会使最基本的机器人失效。 - Nathan MacInnes

2

3
我猜测机器人很可能能够将其转换回来。 - Gigala

2
  • 我首先想到的是渲染一张图片。
  • 使用Javascript进行混淆。
  • 使用php函数进行混淆。

0

当然可以用文字而不是数字打印电话号码...


我只有很小的空间可以写入“零一九三三八四七五” :P - Blur
@模糊 - 不过说真的,这真的很难做到同时为那些没有使用标准浏览器的用户保留一个可访问的网站。 - Paddy

0
创建一个数字的图像,这将挫败大多数机器人,但有些可能会使用OCR技术,因此需要进行混淆。
例如:好的:

phone# img

更好的写法:

better phone# img

第二种方法更好,因为像验证码一样,背景包含“噪音”,这使得启用OCR的机器人难以收集,但对人眼来说易读。
最困难的解决方案是使用验证码或简单的PHP脚本即时创建图片,但在大多数情况下,除非您使用许多不同的数字,否则上述“更好”的解决方案是最简单和最快速的方法,甚至可以在像Paint这样的简单程序中轻松完成5分钟。
对于视力受损者,请包含一个小链接到您说出数字的音频文件(mp3),如果链接正确,则应该可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接