PHP检测类似机器人的行为

6
我正在尝试构建一个系统,只有在检测到类似机器人的行为时才向用户显示CAPTCHA。以下是我目前在填写联系表格时正在寻找的行为...
  1. 页面加载后提交表单的速度(如果在5秒钟内提交,几乎不可能是人为操作)

  2. 在过去的一小时内尝试联系的次数(每小时限制15次),或者在一天内尝试联系的次数(每天限制25次)

  3. 检查消息内容中的链接,并与最近一天内包含的其他链接进行交叉检查

  4. 检查消息中是否包含垃圾邮件关键字


我将随着时间添加有用的社区解决方案:


还有哪些行为能够表明PHP可以帮助检测到机器人(不想使用JS因为它可以被关闭),而不需要CAPTCHA的帮助?


如果页面上有任何图像/CSS,则机器人不太可能加载它们。 - Artelius
你的意思是说如果页面上有图像/CSS,机器人甚至不会加载页面吗?大多数页面至少都有CSS,不是吗? - johnnietheblack
我认为他的意思是他们不会加载图片和CSS文件。 - esqew
这个页面已经存在几年了,我想知道蜜罐方法是否仍然有效? - Jens
6个回答

6

一种非常简单的方法(一些更高级的机器人可能不会被这个方法骗过,但许多基本的机器人会)- 在表单中添加一个虚假字段,对于普通用户来说是不可见的(并且备用方案是,可能有一个通常不可见的标签“不要在这里输入任何内容”)。如果提交时该字段中有内容,则很有可能是机器人。


对,我确实听说过那个……“蜜罐”……如果有人感兴趣,我会编辑我的问题并添加一个链接。 - johnnietheblack

2

我认为您可以与您的robots.txt文件协作,并确定是否被用户访问,这将允许您跟踪请求者的IP地址/时间戳,从而使普通用户看到您的robots.txt 文件的可能性降低。

因为大多数机器人都会检查您的robots.txt文件(也许是为了检查目录结构等)。


1
我认为他想要防止那些冒充人类、带有不良或直接犯罪意图的机器人进入,并且不检查 robots.txt 文件。 - Pekka
你能做到吗?我真的不知道这是否可能,但如果你可以描述一下或者提供一个链接告诉我如何做,那就是一个好主意。 - johnnietheblack
一些机器人可能会检查 robots.txt 文件以获取目录结构。但我并不是指针对 Google/Yahoo/搜索引擎爬虫。 - Jakub

2

有趣的因素可能是打字频率和鼠标移动。它们很容易通过JavaScript捕获。分析它们是另一回事,尽管我想计算偏差和平均值应该相当容易,这些可以给出一个很好的想法,即运动有多“有机”。

另一方面,这在客户端非常昂贵,如果被检测到可能被理解为监视/窥探。也许作为对被怀疑为机器人的客户的高级安全性?


1
不是一个坏主意,但如果我是一个机器人,我可以很容易地关闭 JavaScript 并绕过它,不是吗? - johnnietheblack
是的。只有在必须使用Javascript时才能起作用。 - Pekka
酷!对于一个很棒的想法我给加上 +1 ... 但是我需要非 JS 的解决方案(我希望尽可能做到完美无缺,而且我的网站不依赖于 JS)...谢谢! - johnnietheblack

2

我在表单中添加了一个隐藏字段(通过CSS,display:none),它的name="email",当它被填写时,说明是机器人 ;)


1

我建议不要试图猜测标志,它们总是在变化。

我将对行为的每个可想象的“特征”进行标记化,并自动使用“ok”、“垃圾邮件”或“unsure”对这些特征进行评分。然后,“通过错误训练”(记录猜测错误的情况)。经过一段时间后,您可以达到99.7%的准确率。

以下是提交到我的网站的七个最有趣的特征的示例,得分为89.9771%的垃圾邮件。 它是垃圾邮件。

在帖子中找到的每个关键字都是98.9%可能是垃圾邮件的特征:

mssg txt - "tours" || Prob 0.98993 
mssg txt - "cruises" || Prob 0.98993
mssg txt - "agencies" || Prob 0.98993
mssg txt - "choice" || Prob 0.98991 

电话号码‘12345’有95%的可能是垃圾信息

tel number - "123456" || Prob 0.95440 Delta 0.45440

消息的总长度为30个字符(去除HTML后),这是一个表明94%垃圾邮件的特征。

mssg maxlen - "30" || Prob 0.94600 

还有一个特征得分为Prob 0.01011,它抵消了总合成分数,使得得分有所下降。但是,我不会说出那个特征是什么 ;o)


这条消息来自一个众所周知的垃圾IP地址:http://www.projecthoneypot.org/ip_84.19.186.171,但是没有必要使用特定的知识来将其标记为垃圾邮件。我收集各种信息,如IP地址、提交速率等等...但是,正如你看到的,最明显的机器人行为迹象并不是你可能猜测的那样。

要创建自己的...阅读此文: http://www.paulgraham.com/spam.html


1

也许可以检查引用的 URL?我很难想象有很多人会在没有实际浏览网站中的几个其他页面的情况下直接进入联系表单,同样适用于订单表单...


那么针对引用的URL做什么呢?检查它是否被列入黑名单? - Jens
不,检查是否为有效条目。虽然它可以被欺骗。 - lalengua

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