背景
合法的蜘蛛很棒。它是网络的一部分,我很高兴他们访问我的网站。
没有经过授权的抓取我网站的蜘蛛是坏的,我想摆脱它们。
我有一个 PHP 应用程序可以监控我的网站访问文件。每次带有可疑 UserAgent 的用户访问该站点时,系统都会检查访问日志中是否有来自同一 IP 地址的条目,并对其行为做出判断。如果它不是人,而且我没有授权它,那么它会被记录下来,我可能会(也可能不会)采取阻止等措施。
它的工作方式是每次加载页面时都会发生检查访问文件的过程。我只检查可疑的 UserAgent,因此检查次数保持在最低限度。
问题
我想做的是检查每次访问该站点(即检查访问文件的最后 50 行以查看是否与该访问 IP 相关)。但这意味着我的 Web 服务器处理的每个子进程都希望打开一个访问日志文件。这听起来像是资源和 I/O 阻塞的噩梦。
有没有一种方法可以将 access.log 文件“拖尾”到某种中央内存中,所有 Web 进程都可以同时访问(或至少非常快)。也许将它加载到 Memcache 或类似的。但我如何实时做到这一点?因此 access.log 文件的最后 500 行连续加载到内存中(但只有 500 行被删除,而不是不断增加的数字)。
所以简单来说:是否有 php 或 linux 或“其他”方式将不断增加的文件(即 nginx 日志文件)缓冲到内存中,以便其他进程可以同时访问信息(或至少比所有读取更快硬盘驱动器上的文件)。
最佳答案
重要的是要知道编写良好的服务将始终能够模仿浏览器的行为,除非您做了一些非常奇怪的事情会影响合法访问者的用户体验。
但是,即使是复杂的爬虫,也有一些措施可以应对:
0。忘记......
… 引荐来源网址和 UA 字符串。这些很容易伪造,一些合法用户没有通用的。你会得到很多假阳性/阴性结果,但收获不大。
1。 throttle
像 Apache 或 nginx 这样的 Web 服务器具有核心或附加功能来限制某些请求的请求率。例如,您可以允许每两秒下载一个 *.html 页面,但不限制 JS/CSS 等资源。 (请记住,您还应该通过 robots.txt 将延迟通知合法机器人)。
2。 Fail2ban
Fail2ban 做的事情与您想要做的类似:它扫描日志文件以查找恶意请求并阻止它们。它对恶意软件机器人非常有效,应该可以将其配置为处理爬虫(至少是不太聪明的爬虫)。
--
这些是专门回答您的问题的,但还有一些您可以考虑:
3。修改内容
这实际上是一个非常有趣的事情:有时,我们会对 HTML 页面和 JSON 提要进行较小的(自动)修改,这会迫使抓取工具调整其解析器。有趣的是,我们在他们的网站上看到过时的数据几天,直到他们 catch 来。然后我们再修改一下。
4。限制:验证码和登录
除了 Web 服务器级别的限制外,我们还计算每个 IP 地址每小时的请求数。如果超过一定数量(对于合法用户来说应该足够了),则对 API 的每个请求都需要解决验证码问题。
其他 API 需要身份验证,因此它们甚至不会进入这些区域。
5.滥用通知
如果定期访问某个 IP 地址或子网,您可以对他们运行机器人的网络服务进行 WHOIS 查询。通常,他们有滥用行为联系人,而且通常这些联系人非常渴望听到有关违反政策的信息。因为他们最不想看到的就是进入黑名单(如果他们不合作,我们会提交给他们)。
另外,如果您在抓取工具的网站上看到广告,您应该通知广告网络他们被用于盗取 Material 的事实。
6。 IP 禁令
很明显,您可以阻止单个 IP 地址。我们所做的甚至是阻止整个数据中心,例如 AWS、Azure 等。网络上提供了所有这些服务的 IP 范围列表。
当然,如果有合作伙伴服务从数据中心合法访问您的网站,您必须将他们列入白名单。
顺便说一句,我们不在 Web 服务器中执行此操作,而是在防火墙级别 (IPtables) 执行此操作。
7.法律措施
如果您认为爬虫可能害怕您方面的法律诉讼,您应该毫不犹豫地联系他们并明确他们侵犯了您的版权和使用条款,他们可能会受到法律诉讼。
8.结语
毕竟,与爬虫战斗是“与风车的战斗”,可能需要付出很大的努力。你将无法阻止所有这些,但你应该专注于那些伤害你的东西,例如。浪费你的资源或赚取本应属于你的钱。
祝你好运!
关于php - 实时识别爬虫 - PHP - 跟踪内存中的访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186518/