从过去的几周开始,我在我的网站上经历了机器人攻击。基本上,爬虫在网站上运行的频率很高,导致负载增加。这会导致带宽消耗,从而给其他人带来糟糕的用户体验。我想知道像谷歌、亚马逊和电子海湾这样的网站是如何防止这些事情的:
不能设置诸如连接或数据包/时间/ip之类的阈值,因为这将导致站点上的适当客户的用户体验较差。
发布于 2012-02-12 09:32:20
以下是我所做的,以及我的建议:
创建在cron上运行1-5分钟的脚本:读取原始访问日志(例如,最后20,000行--取决于站点的活动情况),根据IP/主机名组织数据,然后按unix时间组织数据,并附带结果。循环遍历结果,并确定哪个IP没有向已知和必需的页面元素(如图像、js、css等)发出任何请求。从这些请求中,计算出在一秒钟内发出了多少个页面请求。我会将4页请求或更多的请求描述为过度和滥用。从这里,检查好的机器人的白名单(preg_match与主机名对应的东西,如"googlebot.com“等),并将结果的所有ip和主机名都存储到数据库中。
在显示/处理任何内容之前,创建在每个页面上运行的另一个脚本。让它验证所请求的页面是否来自被禁止的IP数据库中的IP。如果是的话,返回一个带有captcha表单的403,提示用户提交重新审议。如果他们这样做了,并且它是有效的,让脚本解除他们。如果它们未被禁止,则将其存储在会话中,以避免对访问者进行重复验证。
最后,在服务器上安装monit,并将其配置为每分钟监视一次http。如果服务器没有响应,它将自动重新启动。这将有助于最大限度地减少停机时间和极端滞后。我上面描述的脚本将自动识别刮板和坏的机器人,并撤销访问权限。如果有重新审议的请求,它也将自动处理。
发布于 2012-10-27 06:08:16
像Cloudflare或Project HoneyPot这样的解决方案应该能做到这一点。看看这个还有几个指针- https://drupal.stackexchange.com/questions/45678/watchdog-404-page-not-found-entries-from-spambot-guessing-urls/48448#comment50114_48448
https://serverfault.com/questions/321383
复制