java - 如何检测顶级合法搜索引擎机器人?

标签 java networking grails

我想开发一种非常强大的方法来检测少数几个顶级搜索引擎蜘蛛,例如 googlebot,并让它们访问我网站上的内容,否则通常需要用户注册/登录才能查看该内容。

请注意,我还使用 cookie 让用户无需注册即可访问某些内容。因此,如果在客户端浏览器上禁用 cookie,则不会提供除首页之外的任何内容。但我听说搜索引擎蜘蛛不接受 cookie,因此这也会将合法的搜索引擎机器人拒之门外。这是正确的吗?

我听到的一个建议是从 ip 地址进行反向查找,如果它解析为例如 googlebot.com,则进行正向 dns 查找,如果取回原始 ip,那么它是合法的,而不是有人冒充 googlebot .我在 Linux 服务器上使用 Java,因此我正在寻找基于 Java 的解决方案。

我只让 google yahoo bing alexa 等顶级搜索引擎蜘蛛进入,而将其他蜘蛛拒之门外以减少服务器负载。但它非常重要的顶级蜘蛛索引我的网站。

最佳答案

要更完整地回答您的问题,您不能只依赖一种方法。问题是你想做的事情的矛盾性质。从本质上讲,您希望允许优秀的机器人访问您的网站并将其编入索引,以便您可以出现在搜索引擎上;但您想阻止不良机器人占用您的所有带宽并窃取您的信息。

第一道防线:

在站点的根目录下创建一个 robots.txt 文件。参见 http://www.robotstxt.org/有关的更多信息。这将在最有意义的站点区域中保留良好、行为良好的机器人。请记住,如果您为一个机器人和另一个机器人提供不同的行为,robots.txt 依赖于 User-Agent 字符串。参见 http://www.robotstxt.org/db.html

第二道防线:

过滤用户代理和/或 IP 地址。我已经因为提出这一建议而受到批评,但令人惊讶的是,很少有机器人会伪装它们的身份和身份——即使是坏人。同样,它不会阻止所有不良行为,但它提供了一定程度的尽职调查。稍后将详细介绍如何利用 User-Agent。

第三道防线:

监控您的 Web 服务器的访问日志。使用日志分析器找出大部分流量的来源。这些日志包括 IP 地址和用户代理字符串,因此您可以检测有多少 bot 实例正在攻击您,以及它是否真的如其所说:参见 http://www.robotstxt.org/iplookup.html

您可能需要启动自己的日志分析器来找出来自不同客户端的请求率。任何超过某个阈值(例如 10/秒)的东西都可能在以后成为速率限制的候选对象。

利用用户代理获取替代站点内容:

我们必须采取一种方法来保护我们的用户免受甚至是合法机器人攻击我们网站的攻击,即根据 User-Agent 拆分流量。基本上,如果 User-Agent 是一个已知的浏览器,他们就会得到全功能的站点。如果它不是已知的浏览器,它就会被视为机器人,并获得一组简单的 HTML 文件,其中仅包含它们完成工作所需的元信息和链接。机器人的 HTML 文件每天静态生成四次,因此没有处理开销。您还可以呈现 RSS 提要,而不是提供相同功能的精简 HTML。

最后说明:

您只有这么多资源,并不是每个合法的机器人都表现良好(即忽略 robots.txt 并给您的服务器带来很大压力)。随着时间的推移,您将不得不更新您的方法。例如,如果一个 IP 地址原来是您的客户(或他们的客户)制作的自定义搜索机器人,您可能不得不求助于对该 IP 地址进行速率限制,而不是完全阻止它。

从本质上讲,您是在努力在为用户提供服务和保持网站对搜索引擎可用之间取得良好的平衡。尽一切努力让您的网站响应用户,并且仅在必要时才采用更高级的策略。

关于java - 如何检测顶级合法搜索引擎机器人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4439031/

相关文章:

java - smack中XMPPConnection的登录方法出现异常

java - 在 JavaFx 中管理至少三个线程

c# - Windows 服务无法访问网络位置 (UNC) 路径

apache - 无法从远程计算机访问 Apache Web 服务器

登录特定 Controller 的 grails

java - 使用 for 循环查找奇数结果

java - 在 Kotlin 中将函数调用分配给变量

java - IOException 网络无法访问

grails - Grails 3.0.1-文件夹丢失了吗?

grails - 对WebSphere 7或8的Grails支持