在PHP中有效地限制每分钟的点击次数(阻止网络抓取或复制机器人)


Efficiently limit number of hits per minute (block web scraping or copy-bots) in PHP

我面临着机器人从我的网页上复制所有内容的问题(我经常尝试更新)。

我试图禁止它们,或者混淆代码,使其更难复制。然而,他们找到了一些方法来克服这些限制。

我想尝试限制每分钟的点击次数(或X次,不一定是分钟),但使用Captcha来克服这些限制。比如,如果你在过去5分钟内要求超过10页,你需要用Captcha证明你是人。所以,如果用户是合法用户,你就可以继续上网了。

我只想在内容页面上做(这样做会更有效率)。我曾经想过MemCached,但由于我不欠服务器钱,我不能使用它。如果我使用Servlet,我会使用HashMap或类似的东西,但既然我使用PHP,我仍在努力寻找解决方案。

我不认为MySql(或数据库)是一个解决方案,因为我每秒可以有很多点击。我应该在几分钟后删除旧请求,从而产生大量不必要和低效的流量。

有什么想法吗?

摘要: 如果我在网页的某个部分每分钟点击次数太多,我想在PHP中有效地使用Captcha来限制它。比如,如果你在过去5分钟内要求超过10页,你需要用Captcha证明你是人

你的问题有点违背了互联网的精神。

  1. 每个人都向每个人复制/借用
  2. 每个搜索引擎都有一个网络上所有其他内容的副本

我想你遇到的问题是这些机器人在窃取你的流量?如果是这样的话,我建议你尝试实现一个API,允许他们合法地使用你的内容。

通过这种方式,你可以控制访问,而且至关重要的是,你可以要求链接回你的网站,以换取使用你的内容。这样,你的网站应该是第一位的内容。您甚至不需要API来实现此策略。

如果你坚持限制用户访问,你有以下选择:

  1. 使用javascript解决方案,并使用Ajax将内容加载到页面中。即使这样也骗不了最好的机器人
  2. 将您的所有内容置于用户名/密码系统之后
  3. 阻止违规IP-这是一场维护噩梦,你永远无法保证,但它可能会有所帮助

问题是,如果你想让谷歌找到你的内容,并将其限制在其他机器人上,你就是在问不可能的事情。

你最好的选择是创建一个API,控制人们复制你的东西,而不是试图阻止它