PHP检测类似bot的行为

时间:2009-11-19 20:34:49

标签: php spam-prevention robot

我正在尝试构建一个只在检测到类似bot的行为时才向用户显示CAPTCHA的系统。当有人填写联系表格时,我正在寻找的行为......

  1. 页面加载后表单的提交速度有多快(如果5秒或更短时间,则几乎人道无法填写)

  2. 过去一小时(限制15小时/天)或白天(限制25天/天)已尝试了多少次联络

  3. 检查链接的消息内容,并交叉检查过去一天最近包含的其他链接的链接

  4. 检查垃圾邮件关键字的消息


  5. 我会在这里添加有用的社区解决方案:


    在没有CAPTCHA帮助的情况下,哪些其他行为可以指示PHP可以帮助检测机器人(不想使用JS,因为它可以关闭)?

6 个答案:

答案 0 :(得分:6)

一个非常简单的机器人(一些更高级的机器人不会因此而失败,但许多基本机器人会这样做) - 将伪造的字段放在常规用户看不到的形式中(并作为备份,也许与一个通常不可见的标签“不要在这里输入任何东西”)。如果提交时该字段中有内容,则可能是机器人。

答案 1 :(得分:2)

我相信你可以与你的robots.txt文件协调,并确定它是否被用户命中,这样就可以让你跟踪请求者的ip / timestamp,这样就不太可能了普通用户会看到您的robots.txt文件。

由于大多数机器人会检查你的robots.txt文件(可能是dir结构等)。

答案 2 :(得分:2)

一个有趣的因素可能是键入频率和鼠标移动。它们很容易通过JavaScript捕获。分析它们是另一回事,虽然我认为计算偏差和平均值会很容易理解这些运动是如何“有机”的。

另一方面,这在客户端非常昂贵,并且如果被检测到可以被理解为窥探/间谍。对于怀疑是机器人的客户来说,可能是高级安全性吗?

答案 3 :(得分:2)

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

答案 4 :(得分:1)

也许查看引用网址?我很难想象很多人在没有真正首先浏览网站中的其他几个页面的情况下以联系方式结束,同样适用于订单表单,......

答案 5 :(得分:1)

我建议忘记尝试猜测这些迹象......他们总是在改变。

我会对行为的每个可以想象的“功能”进行标记,并使用“确定”,“垃圾邮件”或“不确定”自动对功能进行评分。然后,'训练错误'(记录猜测错误的情况)。经过一段时间后,你可以达到99.7%的准确率。

以下是我的网站提交的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