我有一个运行网站的 LAMP 服务器,我想防止批量抓取/下载该网站。我知道对此没有完美的解决方案,攻击者总能找到方法。但我希望至少有一些“保护”可以加强窃取数据的方式,而不是什么都没有。
这个网站有cca。 5000 个子页面,每个页面上都有有值(value)的文本数据和几张图片。我希望能够在线分析传入的 HTTP 请求,如果有可疑事件(例如,一分钟内来自一个 IP 的数十个请求),它会自动将该特定 IP 地址列入黑名单,以防止进一步访问该站点。
我完全意识到我所要求的有很多缺陷,但我并不是真的在寻找防弹解决方案,而是一种如何限制脚本小子“玩”容易抓取的数据的方法。
感谢您针对主题的回答和可能的解决方案。
虽然这是一篇很老的帖子,但我认为答案还不够完整,我认为值得加入我的两分钱。首先,我同意@symcbean 的观点,尽量避免使用 IP,而是使用 session 、cookie 或其他方法来跟踪个人。否则,您可能会冒着将共享 IP 的用户组混为一谈的风险。最常见的速率限制方法,本质上就是您所描述的“一个 IP 在一分钟内发出数十个请求”,是使用 the leaky bucket algorithm .
其他对抗网络爬虫的方法是:
- 验证码
- 让您的代码难以解释,并经常更改它。这使得脚本更难维护。
- 下载已知垃圾邮件发送者、代理服务器、TOR 导出节点等的 IP 列表。这将是一个冗长的列表,但它是一个很好的起点。您可能还想阻止所有亚马逊 EC2 IP。
此列表和速率限制将阻止简单的脚本小子,但任何具有中等脚本编写经验的人都可以轻松绕过您。独自对抗爬虫是徒劳的,但我的观点是有偏见的,因为我是 Distil Networks 的联合创始人。提供防刮保护服务。