我正在尝试构建一个系统,仅在检测到类似机器人的行为时才向用户显示验证码。以下是我目前正在寻找的当有人填写联系表格时的行为...
页面加载后提交表单的速度有多快(如果是 5 秒或更短时间,则几乎人性化地不可能填写)
过去一小时(每小时限制 15 次)或一天(每天限制 25 次)尝试联系多少次
检查消息内容中的链接,并将链接与过去一天中最近包含的其他链接进行交叉检查
检查邮件中是否有垃圾邮件关键字
我将在这里添加有用的社区解决方案:
使用“蜜罐”(信息位于http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx)
检查外部入口的引用网址
在没有验证码的帮助下,PHP 可以帮助检测哪些其他行为表明机器人(不想使用 JS,因为它可以关闭)?
一个非常简单的方法(一些更高级的机器人不会受此影响,但许多基本机器人会) - 以普通用户不可见的形式放置一个虚假字段(并且作为备份,也许使用正常的隐形标签“不要在此处输入任何内容”)。如果提交时字段中有内容,则很可能是机器人。
我相信你可以与你的
robots.txt
文件协调,并确定它是否被用户点击,这将允许你跟踪请求者的 IP/时间戳,这将使普通用户看起来不太可能看到您的 robots.txt
文件。
大多数机器人都会检查您的 robots.txt 文件(可能是目录结构等)。
一个有趣的因素可能是打字频率和鼠标移动。通过 JavaScript 很容易捕获它们。分析它们是另一回事,尽管我认为计算偏差和平均值相当容易,可以很好地了解运动的“有机”程度。
另一方面,这在客户端是极其昂贵的,如果检测到,可以理解为窥探/间谍活动。也许可以为被怀疑是机器人的客户提供高级安全保护?
我用name="email"
向表单添加了一个
隐藏字段(通过CSS,显示:无),当它被填充时,它是一个机器人;)
也许检查引用网址?我很难想象很多人在没有实际先浏览网站中的其他几个页面的情况下就进入了联系表格,订单表格也是如此,...
我建议忘记尝试猜测标志......它们总是在变化。
我会对行为的每个可以想象的“特征”进行标记,自动用“好”、“垃圾邮件”或“不确定”对这些特征进行评分。然后,“错误训练”(记录猜测错误的情况)。一段时间后,您的准确率可以达到 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