实时识别一个scraper-PHP-在内存中跟踪访问文件


Identify a scraper in realtime - PHP - tail the access file in Memory

背景

合法的蜘蛛很棒。它是网络的一部分,我很高兴他们能访问我的网站。

没有授权的蜘蛛刮我的网站是坏的,我想摆脱他们。

我有一个PHP应用程序来监控我的网站访问文件。每次有可疑UserAgent的用户访问站点时,系统都会检查访问日志中是否有来自同一IP地址的条目,并对其行为做出判断。如果它不是人类,并且我没有授权它,那么它就会被记录下来,我可能(也可能不会(采取阻止等行动。

它的工作方式是,每次页面加载时,都会进行检查访问文件的过程。我只检查可疑的UserAgent,所以检查次数保持在最低限度。

问题

我想做的是检查访问该网站的每一次访问(即检查访问文件的最后50行,看看是否有与访问IP有关的内容(。但这意味着我的web服务器处理的每个子进程都希望打开一个单独的访问日志文件。这听起来像是一场资源和I/O阻塞的噩梦。

有没有一种方法可以将access.log文件"尾随"到某种中央内存中,所有web进程都可以同时访问(或者至少非常快地访问(。也许将其加载到Memcache或类似程序中。但是我该如何实时地做到这一点呢?因此,access.log文件的最后500行连续加载到内存中(但只有500行在执行过程中被删除,而不是一个不断增加的数字(。

简单来说:是否有php或linux或"其他"方法将不断增加的文件(即nginx日志文件(缓冲到内存中,以便其他进程可以同时访问信息(或者至少比所有从硬盘读取文件更快(。

重要的是要知道,一个写得好的服务总是能够模仿浏览器的行为,除非你做了一些非常奇怪的事情,会影响合法访问者的用户体验。

然而,即使是处理复杂的刮刀,也有一些措施:

0。忘记

…referrer和UA字符串。这些很容易伪造,而且一些合法用户没有通用的。你会得到很多假阳性/假阴性,但不会有太多收获。

1.节气门

像Apache或nginx这样的Web服务器具有核心或附加功能,可以控制某些请求的请求率。例如,您可以允许每两秒钟下载一个*.html页面,但不限制JS/CSS等资产。(请记住,您还应该通过robots.txt通知合法的机器人延迟(。

2.故障2板

Fail2ban的功能与您想要做的类似:它扫描日志文件以查找恶意请求并阻止它们。它对恶意软件机器人非常有效,应该可以配置它来处理抓取器(至少是不太聪明的抓取器(。

--

这些是专门回答你问题的,但还有几个,你可以考虑:

3.修改内容

这实际上是一个非常有趣的过程:我们不时地对HTML页面和JSON提要进行微小的(自动的(修改,这迫使scraper调整他们的解析器。有趣的是,当我们在他们的网站上看到过时的数据几天,直到他们赶上为止。然后我们再次修改它。

4.限制:字幕和登录

除了web服务器级别的限制之外,我们还计算每小时每个IP地址的请求数。如果它超过了某个数字(对于合法用户来说应该足够了(,则对API的每个请求都需要解决captcha。

其他API需要身份验证,所以它们甚至不会进入这些领域。

5.滥用证明

如果定期访问某个IP地址或子网,您可以对他们运行机器人的网络服务进行WHOIS查找。通常,他们有虐待联系人,通常这些联系人非常渴望听到违反政策的消息。因为他们最不想做的就是进入黑名单(如果他们不合作,我们会将他们提交给黑名单(。

此外,如果你在scraper的网站上看到广告,你应该通知广告网络,它们被用于被盗材料的背景下。

6.知识产权禁令

很明显,您可以屏蔽单个IP地址。我们所做的甚至是屏蔽整个数据中心,比如AWS、Azure等。网络上有所有这些服务的IP范围列表。

当然,如果有合作伙伴服务从数据中心合法访问您的网站,您必须将其列入白名单。

顺便说一句,我们不是在web服务器上这样做,而是在防火墙级别(IPtables(上这样做。

7.法律措施

如果你认为刮刀可能害怕你方的法律诉讼,你应该毫不犹豫地联系他们,并明确表示他们侵犯了你的版权和使用条款,他们可能会受到法律诉讼。

8.结论

毕竟,对抗刮削机是"对抗风车",可能需要付出很多努力。你无法阻止所有这些,但你应该专注于那些伤害你的事情,例如浪费你的资源或赚钱。

祝你好运!