【问题标题】:Block IP addresses in .htaccess or in PHP from database?从数据库中阻止 .htaccess 或 PHP 中的 IP 地址?
【发布时间】:2013-04-30 15:18:16
【问题描述】:

我正在为我的网站构建一个 bot-trap / crawler-trap:

页面某处有一个隐藏链接,普通用户看不到,但机器人可以看到。链接也在robots.txt中注明,所以Google不会掉入陷阱。 当机器人打开隐藏页面时,IP 会自动在MySQL 中标记为红色。

我的问题是:

  1. 当新 IP 被标记时,哪种方式更好地阻止它:重新生成 .htaccess 文件,并将新 IP 添加到其中,以便网络服务器本身进行阻止。
  2. 不要乱用.htaccess,而是每次有人加载页面时从MySQL 查找IP 表,然后在PHP 中决定如何处理用户。

【问题讨论】:

  • 那些使用屏幕阅读器或基于文本的浏览器的人呢?他们会看到链接并可能落入您的陷阱吗?
  • 链接标记为“display: none;”。对于普通用户,我指的是除了谷歌、雅虎和更大的搜索引擎之外的所有人,不是机器人。
  • 请记住,某些浏览器(包括我列出的类别中的许多浏览器)会忽略 CSS 样式或仅使用其中的一部分。

标签: php mysql blocking web-crawler


【解决方案1】:

我肯定会选择选项 2。唯一的原因是我会非常不舒服,因为我一直在网站上随机播放一个 .htaccess 文件。那种烦人的感觉,就好像我的额头上总有一把枪。

如果是 db 驱动,最糟糕的情况可能是某些黑名单 IP 仍然可以访问。如果出现问题,使用 htaccess 不仅会破坏每个用户的体验,还会危及安全数据。..

【讨论】:

    【解决方案2】:

    与其乱用 Apache httpd 配置(如果您的脚本因某种原因出错会导致 Web 堆栈崩溃),不如与 fail2ban 之类的系统集成呢?

    使用禁止工具进行屏蔽会更有效。

    【讨论】:

      【解决方案3】:

      哪种方式更好?这在很大程度上取决于你能做什么。经验法则是:

      • 不要使用.htaccess 文件 - 直接配置您的服务器。
      • 直接将 Apache 与您的 Mysql 连接以进行身份​​验证。
      • 在 TCP/IP 层 (Iptables) 中阻止传入流量

      其他一切都只是爬行,你可以做,但你应该放心,你会做,因为你不能做对。所以不要太在意,除非你努力做到最好。

      【讨论】:

      • “经验法则”根据谁?可以提供参考吗?
      • 启用.htaccess支持意味着每个Web请求都必须执行多次测试以确定该文件是否存在,并且每个请求中的规则都需要在请求之前被读取、解析、聚合和解释开始。静态/etc/httpd 类型配置在启动时读取一次。
      • @George Cummins:众所周知,系统越直接越好,因为花在差异上的时间越少,失败的事情就越少。关于 .htaccess 的经验法则记录在 Apache HTTPD 文档本身中。访问配置最好在 Web 服务器本身(实际访问层)中完成,而不是在更深的层中完成,如果访问被拒绝,则可能不需要加载。这本身应该很清楚。如果您在应用程序网络服务器之前使用网络服务器,则适用相同的规则。
      • “常识”应该有大量可用的文档。你能提供一些吗?
      猜你喜欢
      • 2013-05-10
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 2011-02-23
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多