从过去几周开始,我的网站就一直受到机器人攻击。基本上,爬虫程序以高频率在网站上运行,导致负载增加。这会导致带宽消耗,从而给其他人带来糟糕的用户体验。我想知道像谷歌、亚马逊和 eBay 这样的网站是如何防止这些事情发生的:
- 他们如何区分有用的爬虫(google/yahoo/msn)和不遵守 robots.txt 和其他规则的恶意爬虫?
- 如何通过检查 Apache 访问日志来实时识别可能导致潜在有害机器人的模式?
无法设置连接数或数据包/时间/IP 等阈值,因为这会导致网站上的适当客户的用户体验不佳。
答案1
这是我所做的以及我的建议:
创建在 cron 上运行 1-5 分钟的以下脚本:阅读原始访问日志(例如,最后 20,000 行 - 取决于您网站的活跃程度),按 IP/主机名组织数据,然后按 unix 时间组织数据并附加结果。循环遍历结果,并确定哪些 IP 没有对已知和必需的页面元素(如图像、js、css 等)发出任何请求。从这些 IP 中,计算一秒钟内发出了多少个页面请求。我认为一秒钟内 4 个或更多页面请求属于过度和滥用。从那里,对照好机器人的白名单进行检查(preg_match 对照主机名,例如“googlebot.com”等),并将未列入白名单的结果的所有 IP 和主机名存储到数据库中。
创建另一个脚本,在显示/处理任何内容之前在每个页面上运行。让它验证所请求的页面是否来自被禁 IP 数据库中的 IP。如果是,则返回 403 并带有验证码表单,提示用户提交以供重新考虑。如果他们提交了验证码,并且验证通过,则让脚本解除对他们的禁令。如果他们没有被禁止,则将其存储在会话中以避免对该访问者进行重复验证。
最后,在您的服务器上安装 monit,并将其配置为每分钟监控一次 http。如果服务器没有响应,它会自动重新启动。这将有助于最大限度地减少停机时间和极端延迟。我上面概述的脚本将自动识别抓取工具和恶意机器人,并撤销访问权限。如果有任何重新审核请求,它还将自动执行。
答案2
Cloudflare 或 Project HoneyPot 等解决方案应该可以解决问题。请查看以下几点建议 -https://drupal.stackexchange.com/questions/45678/watchdog-404-page-not-found-entries-from-spambot-guessing-urls/48448#comment50114_48448