首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >防止恶意爬虫/刮板和DDoS攻击的方法

防止恶意爬虫/刮板和DDoS攻击的方法
EN

Server Fault用户
提问于 2011-10-14 07:40:08
回答 2查看 1.7K关注 0票数 0

从过去的几周开始,我在我的网站上经历了机器人攻击。基本上,爬虫在网站上运行的频率很高,导致负载增加。这会导致带宽消耗,从而给其他人带来糟糕的用户体验。我想知道像谷歌、亚马逊和电子海湾这样的网站是如何防止这些事情的:

  1. 它们如何区分有用的爬虫(google/yahoo/msn)和不遵循robots.txt和其他规则的恶意爬虫?
  2. 如何通过检查apache访问日志来识别可能导致实时有害的机器人的模式?

不能设置诸如连接或数据包/时间/ip之类的阈值,因为这将导致站点上的适当客户的用户体验较差。

EN

回答 2

Server Fault用户

发布于 2012-02-12 17:32:20

以下是我所做的,以及我的建议:

创建在cron上运行1-5分钟的脚本:读取原始访问日志(例如,最后20,000行--取决于站点的活动情况),根据IP/主机名组织数据,然后按unix时间组织数据,并附带结果。循环遍历结果,并确定哪个IP没有向已知和必需的页面元素(如图像、js、css等)发出任何请求。从这些请求中,计算出在一秒钟内发出了多少个页面请求。我会将4页请求或更多的请求描述为过度和滥用。从这里,检查好的机器人的白名单(preg_match与主机名对应的东西,如"googlebot.com“等),并将结果的所有ip和主机名都存储到数据库中。

在显示/处理任何内容之前,创建在每个页面上运行的另一个脚本。让它验证所请求的页面是否来自被禁止的IP数据库中的IP。如果是的话,返回一个带有captcha表单的403,提示用户提交重新审议。如果他们这样做了,并且它是有效的,让脚本解除他们。如果它们未被禁止,则将其存储在会话中,以避免对访问者进行重复验证。

最后,在服务器上安装monit,并将其配置为每分钟监视一次http。如果服务器没有响应,它将自动重新启动。这将有助于最大限度地减少停机时间和极端滞后。我上面描述的脚本将自动识别刮板和坏的机器人,并撤销访问权限。如果有重新审议的请求,它也将自动处理。

票数 1
EN

Server Fault用户

发布于 2012-10-27 14:08:16

像Cloudflare或Project HoneyPot这样的解决方案应该能做到这一点。看看这个还有几个指针- https://drupal.stackexchange.com/questions/45678/watchdog-404-page-not-found-entries-from-spambot-guessing-urls/48448#comment50114_48448

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/321383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档