【问题标题】:Allow search bots to crawl your sites without session IDs允许搜索机器人在没有会话 ID 的情况下抓取您的网站
【发布时间】:2011-01-13 06:56:54
【问题描述】:

Google 的Webmaster guidelines 状态

允许搜索机器人在不使用会话 ID 或跟踪其在网站中的路径的参数的情况下抓取您的网站。这些技术对于跟踪个人用户行为很有用,但机器人的访问模式完全不同。使用这些技术可能会导致您网站的索引不完整,因为漫游器可能无法消除看起来不同但实际上指向同一页面的 URL。

我的 ASP.NET 1.1 站点使用自定义身份验证/授权,并且非常依赖会话 guid(类似于 this approach)。我担心允许非会话跟踪流量会破坏我现有的代码或引入安全漏洞。

允许非会话跟踪机器人抓取正常会话跟踪的网站有哪些最佳做法?除了检查用户代理之外,还有什么方法可以检测搜索机器人(我不希望人们将自己伪装成 googlebot 来绕过我的会话跟踪)?

【问题讨论】:

  • 如果您的网页需要身份验证,它们可能不应该被编入索引。还是我在这里遗漏了什么?
  • 只有一些需要身份验证。其余的都是可索引的
  • 恶意用户将自己伪装成 Googlebot 会有什么优势?换句话说,您如何处理会影响冲浪/爬行(即手动/自动)的会话?
  • 我们当前会话跟踪系统的一部分允许管理员通过 IP 地址搜索浏览历史记录。如果他们将自己伪装成 googlebot,它将绕过会话系统,我们将无法看到此类恶意用户试图在网站上做什么
  • 另一个避免会话的原因。

标签: asp.net security session search-engine-bots


【解决方案1】:

检测机器人的正确方法是通过主机条目 (Dns.GetHostEntry)。一些蹩脚的机器人要求您通过 IP 地址进行跟踪,但流行的机器人通常不需要。 Googlebot 请求来自 *.googlebot.com。获取主机条目后,您应该检查IPHostEntry.AddressList 以确保它包含原始IP 地址。

在验证机器人时,甚至不要用户代理。

另见http://googlewebmastercentral.blogspot.com/2006/09/how-to-verify-googlebot.html

【讨论】:

  • 不错的链接。不过,对每个 Web 请求进行 DNS 查找听起来很昂贵。我猜得试试看
  • @qntmfred:您可以缓存这些结果。在紧要关头,您可以为用户代理来自搜索引擎或会话状态丢失的情况保留查找。话虽如此,每次查找您可能只需支付 100 毫秒左右的费用,而且这不是 CPU 时间,因此它只会由需要查找的用户支付。此外,您只对页面的 Web 请求执行此操作。是否 对 css 文件的 Web 请求执行此操作。
  • 99% 的请求都不会是机器人,因此缓存不会有太大帮助。但仅在用户代理指示搜索引擎应该解决问题的情况下进行 dns 查找
  • @qntmfred:一些搜索引擎使用页面加载速度来影响结果。您可能仍想使用缓存。
  • 哦,我明白了。对于说他们是搜索引擎的用户代理,请进行 dns 查找并缓存该 ip。不为每个请求缓存 ip/dns。对
【解决方案2】:

首先:我们在简单地从对已知搜索引擎的响应中删除 JSESSIONID 时遇到了一些问题。最值得注意的是,为每个请求创建一个新会话会导致 OutOfMemoryErrors(当您不使用 Java 时,保持数千个活动会话的状态对于大多数或所有服务器/框架来说肯定是一个问题)。这可以通过减少会话超时来解决(仅适用于机器人会话 - 如果可能)。因此,如果您想走这条路,请注意。如果您这样做,则无需进行 DNS 查找。您在这里没有保护任何有价值的东西(例如,与Google's First Click Free 相比)。如果有人伪装成机器人,那通常应该没问题。

相反,我宁愿建议继续跟踪会话(使用 URL 参数作为 cookie 的后备)并向每个页面添加 canonical link tag<link rel="canonical" href="..." />,显然没有会话 ID 本身)。请参阅“Make Google Ignore JSESSIONID”或extensive video featuring Matt Cutts 进行讨论。添加这个标签并不是很麻烦,无论如何都可能被认为是一种好的做法。所以基本上你会在没有任何专门处理搜索引擎蜘蛛的情况下结束 - 这当然是一件好事(tm)。

【讨论】:

    【解决方案3】:

    我相信,您解决问题的方法不太正确。您不应依赖会话跟踪机制来决定访问权限、记录恶意用户、检测机器人等。

    1. 如果您不希望任意用户访问某些页面,您应该使用身份验证和授权。如果完全允许任意用户访问该页面,则应该允许他们在没有任何会话 ID 的情况下进行访问(就好像这是他们访问的第一个页面一样)——因此,机器人也可以毫无问题地浏览这些页面.

    2. 恶意用户很可能会通过不使用(或调整)cookie、引用者、URL 参数等来绕过您的会话跟踪。因此,会话跟踪无法在此处可靠地使用,只需简单地记录任何请求及其原始IP。稍后您可以分析收集的数据以检测可疑活动,尝试查找具有多个 IP 的用户等。这些分析很复杂,不应该在运行时进行。

    3. 要检测机器人,您可以对收集的 IP 进行反向 DNS 查找。同样,这可以离线完成,因此不会降低性能。通常,所提供页面的内容不应取决于访问者是机器人还是未经身份验证的人类用户(搜索引擎理所当然地将此类行为视为作弊)。

    【讨论】:

      【解决方案4】:

      如果欺骗是您主要关心的问题,那么您就做错了安全措施。你不应该给机器人比用户更多的权限,恰恰相反(因此用户获得登录而机器人获得robots.txt)。

      如果您要在不进行身份验证的情况下授予某人特殊权限,则它本质上是对欺骗开放的。 IP可以被欺骗。服务器-客户端通信可以被欺骗。以此类推。

      如果您依靠跟踪 cookie 来分析恶意行为,则需要解决该问题。在不要求恶意用户识别他/她自己的情况下,应该很容易获得良好的理解。

      IP 不能很好地替代身份验证,但如果 cookie 不可用,它们足以进行分组。此外,您首先应该使用更可靠的方法(即综合因素)。

      【讨论】:

      • 我没有给机器人更多权限。他们拥有与任何其他匿名用户相同的权限。但是,我通过他们的会话跟踪匿名用户的页面访问,我不想向机器人发出会话或跟踪他们的访问。
      • 您认为恶意用户可能不会被 cookie 跟踪是一个安全问题。因此,这种对机器人的特殊待遇似乎是一种特权。首先,这不应该是一个安全问题,这就是我要说的。
      猜你喜欢
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 2013-07-29
      • 2017-11-25
      • 2020-04-29
      相关资源
      最近更新 更多