php - 如何保护网站免受批量抓取/下载?

标签 php mysql apache web-scraping download

<分区>

我有一个运行网站的 LAMP 服务器,我想防止批量抓取/下载该网站。我知道对此没有完美的解决方案,攻击者总能找到方法。但我希望至少有一些“保护”可以加强窃取数据的方式,而不是什么都没有。

这个网站有cca。 5000 个子页面,每个页面上都有有值(value)的文本数据和几张图片。我希望能够在线分析传入的 HTTP 请求,如果有可疑事件(例如,一分钟内来自一个 IP 的数十个请求),它会自动将该特定 IP 地址列入黑名单,以防止进一步访问该站点。

我完全意识到我所要求的有很多缺陷,但我并不是真的在寻找防弹解决方案,而是一种如何限制脚本小子“玩”容易抓取的数据的方法。

感谢您针对主题的回答和可能的解决方案。

最佳答案

虽然这是一篇很老的帖子,但我认为答案还不够完整,我认为值得加入我的两分钱。首先,我同意@symcbean 的观点,尽量避免使用 IP,而是使用 session 、cookie 或其他方法来跟踪个人。否则,您可能会冒着将共享 IP 的用户组混为一谈的风险。最常见的速率限制方法,本质上就是您所描述的“一个 IP 在一分钟内发出数十个请求”,是使用 the leaky bucket algorithm .

其他对抗网络爬虫的方法是:

  • 验证码
  • 让您的代码难以解释,并经常更改它。这使得脚本更难维护。
  • 下载已知垃圾邮件发送者、代理服务器、TOR 导出节点等的 IP 列表。这将是一个冗长的列表,但它是一个很好的起点。您可能还想阻止所有亚马逊 EC2 IP。

此列表和速率限制将阻止简单的脚本小子,但任何具有中等脚本编写经验的人都可以轻松绕过您。独自对抗爬虫是徒劳的,但我的观点是有偏见的,因为我是 Distil Networks 的联合创始人。提供防刮保护服务。

关于php - 如何保护网站免受批量抓取/下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6896483/

相关文章:

php - 有人使用过这个 Highrise API PHP Wrapper 库吗?我需要帮助验证

php - Zend Php/Zend 服务器和简单的 php/Wamp 服务器之间的区别

java - Apache OfBiz 可以与现有版本的 Tomcat 一起安装吗

ruby - 安装 Open Project 7(Apache 错误 : Service Unavailable)

regex - 带重定向的 URL 掩码/伪装

php - 在 JWT Laravel 中使用授权 header 时获取 token_not_provided

PHP 准备语句未在 mysql 数据库中插入数据

php - MySQL:更新所有行将字段设置为 0,但将一行的字段设置为 1

mysql - 一起使用 SQL LIKE 和 IN

MySQL 在给定不同条件的情况下两次显示结果