允许搜索机器人在没有会话ID的情况下抓取您的网站

时间:2010-02-04 21:37:04

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

Google的Webmaster guidelines

  

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

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

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

4 个答案:

答案 0 :(得分:4)

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

在验证机器人时,甚至不能在用户代理处

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

如果您最关心的是欺骗,那么您的安全性就会出错。您不应该为机器人提供比用户更多的权限,恰恰相反(因此用户获取登录和机器人的原因为robots.txt)。

如果您要在未经身份验证的情况下授予某人特殊权限,那么它本身就可以进行欺骗。 IP可能是欺骗性的。服务器 - 客户端通信可能是欺骗性的。等等。

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

IP不是身份验证的良好替代品,但如果没有Cookie,它们就足以进行分组。此外,你应该首先使用更可靠的手段(即多种因素的组合)。