7

谷歌的网站管理员指南状态

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

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

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

4

4 回答 4

4

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

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

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

于 2010-02-25T16:50:09.117 回答
1

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

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

于 2010-02-27T02:51:47.290 回答
0

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

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

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

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

于 2010-03-03T21:36:16.640 回答
0

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

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

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

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

于 2010-03-02T08:56:55.413 回答