网站如何检测机器人?

Posted

技术标签:

【中文标题】网站如何检测机器人?【英文标题】:How do websites detect bots? 【发布时间】:2018-06-05 23:51:36 【问题描述】:

我正在学习 python,目前正在抓取 reddit。不知何故,reddit 发现我是一个机器人(我的软件实际上是),但他们怎么知道呢?以及我们如何欺骗他们认为我们是普通用户。

我找到了实用的解决方案,但我要求更深入的理论理解。

【问题讨论】:

除了验证码人性测试之外,我认为网站无法判断您是否是机器人。使用 python 代码,您可以通过填充标题来欺骗网络,使其认为您是真实的。例如:req = Request(url)req.add_header('User-Agent', 'Mozilla/5.0') 最后一件事,他们可以使用统计数据并分析您的行为。 【参考方案1】:

互联网服务提供商使用大量技术来检测和打击机器人和抓取工具。所有这些的核心是建立可以识别非人类行为的启发式和统计模型。诸如:

每个特定时间范围内来自某个 IP 的请求总数,例如,任何超过每秒 50 个请求、或每分钟 500 个或每天 5000 个的请求都可能看起来可疑甚至是恶意的。计算单位时间内每个 IP 的请求数是一种非常常见且可以说是有效的技术。

传入请求速率的规律性,例如,每秒 10 个请求的持续流可能看起来像一个机器人,它被编程为发出请求、稍等片刻、发出下一个请求,等等。

HTTP 标头。浏览器会随每个请求发送可预测的 User-Agent 标头,以帮助服务器识别其供应商、版本和其他信息。结合其他标头,服务器可能能够确定请求来自未知或其他利用来源。

身份验证令牌、cookie、加密密钥和其他需要以特殊方式形成和提交后续请求的临时信息的有状态组合。例如,服务器可能会向下发送某个密钥(通过 cookie、标头、响应正文等),并期望您的浏览器包含或以其他方式使用该密钥来向服务器发出后续请求。如果太多请求未能满足该条件,则表明它们可能来自机器人。

鼠标和键盘跟踪技术:如果服务器知道只有当用户单击某个按钮时才能调用某个 API,他们可以编写前端代码以确保检测到正确的鼠标活动(即用户确实在 API 请求发出之前确实点击了按钮)。

还有更多的技术。想象一下,您是试图检测和阻止机器人活动的人。您将采取哪些方法来确保请求来自人类用户?您将如何定义人类行为而不是机器人行为,您可以使用哪些指标来区分这两者?

还有一个实用性问题:一些方法成本更高且难以实施。那么问题将是:您需要在多大程度上(可靠程度)检测和阻止机器人活动?您是否在与试图侵入用户帐户的机器人作斗争?或者您只是需要阻止他们(可能以尽力而为的方式)从其他公开可见的网页中抓取一些数据?如果出现假阴性和假阳性检测,您会怎么做?这些问题说明了您可能用来识别和阻止机器人活动的方法的复杂性和独创性。

【讨论】:

同意。 1. 我看到在一段时间内阻止未来请求的重复请求水平要低得多。 OI 每天刮一次漫画网站供我个人阅读。当我需要更新我的软件并在几分钟内发出大约 10 个请求时,我被阻止了。 2. 使User-Agent 与当前浏览器匹配,我在抓取我们自己的网站以进行电话自动登录时遇到过这个问题。3. 除非获得许可,否则不要这样做。 botometer.iuni.iu.edu/#! 该网站检测到其他网站上的机器人。来自印第安纳大学

以上是关于网站如何检测机器人?的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中检测 Ajax 并确保请求来自我自己的网站

检测是不是真正的浏览器或任何机器人或爬虫

如何将网络聊天发送到国家/地区?

程序化机器人检测

如何开展一个机器视觉检测项目?

如何让我的不和谐机器人检测嵌入的字段、标题字段和字段描述?