2009-01-16 107 views
8

我想阻止自动从我们的网站抓取某个网站,同时不影响合法蜘蛛抓取(googlebot等)。有没有已经存在的东西来实现这一目标?我甚至使用正确的术语?如何防止未经授权的蜘蛛抓取

编辑:我主要是为了防止那些会恶意做这件事的人。即他们不会遵守robots.txt

编辑2:如何防止“使用率”的使用...即验证码,以继续浏览如果自动检测和流量不是来自合法(谷歌,雅虎,MSN等)IP。

回答

8

如果不是不可能完成,这很困难。许多“流氓”蜘蛛/爬虫不会通过用户代理字符串识别自己,因此很难识别它们。您可以尝试通过其IP地址阻止它们,但很难跟上将新的IP地址添加到您的阻止列表。如果使用IP地址,则也可以阻止合法用户,因为代理使许多不同的客户端显示为单个IP地址。

在这种情况下使用robots.txt的问题是,蜘蛛可以选择忽略它。

编辑:速率限制是一种可能性,但它有一些识别(并跟踪)“好”和“坏”用户代理/ IP的相同问题。在我们编写的一个内部页面查看/会话计数系统中,我们根据页面查看率排除了会话,但我们也不担心会消除“好”蜘蛛,因为我们不希望它们也计入数据。我们没有做任何有关阻止任何客户实际查看网页的内容。

+1

如果蜘蛛是恶意的,robots.txt将无法完成工作。您需要通过IP或用户代理字符串在防火墙处阻止它们,但不幸的是(如您所述),这可能很难跟上。 – 2009-01-16 03:19:49

+0

最好是创建一个HTML模块来根据请求率,IP等来过滤掉恶意脚本。 – Todd 2009-01-16 03:21:12

+0

如果您使用HTTPModule,那么您将面临可能的DOS攻击。 – 2009-01-16 03:38:42

1

robots.txt只有在蜘蛛承认它时才有效。你可以创建一个HttpModule来过滤掉你不想爬取你的网站的蜘蛛。

0

你应该做好防火墙在检测到恶意用途时所做的一切 - 让他们继续前进,但不要给他们任何东西。如果你开始投掷403或404,他们会知道有什么不对。如果你返回随机数据,他们会去做他们的业务。

虽然要检测恶意使用,但可尝试在搜索结果页面(或其用作站点地图的页面)上添加陷阱链接,并用CSS隐藏它。需要检查他们是否声称是一个有效的机器人,并让他们通过。您可以存储他们的IP以便将来使用并快速搜索。

6

一种方法是建立一个HTTP焦油坑;嵌入一​​个只有自动抓取工具才能看到的链接。这个链接应该放到一个填充了随机文本和链接本身的页面(但是附加页面信息:/tarpit/foo.html,/tarpit/bar.html,/tarpit/baz.html - 但是脚本在/ tarpit /处理200结果的所有请求)。

为了让好人摆脱困境,如果用户代理是谷歌或雅虎,可以生成302重定向到您的主页。

这并不完美,但它至少会减慢幼稚。

编辑:正如Constantin所建议的那样,您可以将tar标记标记为robots.txt中的限制标记。好人使用遵守此协议的网络蜘蛛将不在焦油坑中。这可能会摆脱为已知的好人生成重定向的要求。

5

如果你想保护自己免受通用的爬虫,使用蜜罐。

见,例如,http://www.sqlite.org/cvstrac/honeypot。好蜘蛛不会打开这个页面,因为网站的robots.txt明确地禁止它。人可能会打开它,但不应该点击“我是蜘蛛”链接。坏蜘蛛肯定会遵循这两个环节,所以会出卖它的真实身份。

如果您的网站专门创建的履带,你可以(在理论上)创建一个移动的蜜罐。

1

我一般同意蜜罐方法。但是,我把仅用于蜜罐页面/资源的链接放在了被“/robots.txt”阻止的页面上 - 以及被此类阻止的蜜罐。这样,恶意机器人必须违反“禁止”规则TWICE来禁止自己。一个典型的用户手动跟踪一个不可点击的链接可能只做一次,并且可能找不到包含蜜罐URL的页面。

蜜罐的资源记录的恶意客户端的恶意IP地址转换成这是其他地方作为IP禁止列表中的Web服务器配置的文件。这样,一旦列出,Web服务器将阻止该客户端IP地址的所有进一步访问,直到列表被清除。其他人可能会有某种自动过期,但我相信只能从禁止列表中手动删除。

题外话:我也做了同样的事情,垃圾邮件和我的邮件服务器:这我发送垃圾邮件作为他们的第一条消息的网站都发送任何进一步的消息,直到我清除日志文件禁止。尽管我在应用程序级别实施了这些禁止列表,但我也有防火墙级别的动态禁止列表。我的邮件和网络服务器也在他们之间共享禁止的IP信息。对于一个不成熟的垃圾邮件发送者,我认为相同的IP地址可能同时承载恶意蜘蛛和垃圾邮件。当然,这是BotNet之前,但我从来没有删除它。