npm 包 robots-txt-guard 使用教程

阅读时长 4 分钟读完

在网站开发中,搜索引擎蜘蛛是非常重要的,影响着网站的收录和排名。但是一些蜘蛛会访问一些我们不想让他们访问的页面,比如登录、注册、个人信息等。这时候,就需要使用 robots.txt 文件来屏蔽这些页面。但是,如果我们的 robots.txt 文件被黑客修改,我们的网站中就有可能出现一些不良页面被搜索引擎收录导致其它问题。因此,我们需要一个 npm 包来防止这种情况,这个包就是 robots-txt-guard。

安装 robots-txt-guard

在终端中输入以下代码进行安装:

使用 robots-txt-guard

使用 robots-txt-guard 的方法非常简单,只需要引入该包,然后调用 isAllowed() 方法即可。接下来我们来看一个示例代码:

-- -------------------- ---- -------
----- -------------- - ----------------------------
----- ---------- - -------------------

----- ------------ - ------------------------------------ -- ---------- --- ---

----- ----- - --- ---------------- ---------- ----------- --- -- -- -------------- --

------------------------ -------- ----- --------- ----- - -- -- ---------- ----
    -- ----- -
        -----------------
    - ---- -
        ------------------ -- - ---------- ----------
        -------------------------------------------------------------- -- ---- --- -------
    -
---
展开代码

首先,我们引入了 npm 包 robots-txt-guard,并且还引入了 request 包用于请求 robots.txt 文件。然后,我们定义了 robots.txt 文件的 URL,以及创建了 RobotsTxtGuard 实例。然后在回调函数中,我们调用 parse() 方法来解析从服务器获取的 robots.txt 文件,解析结果将被缓存以便后续使用。最后调用 isAllowed() 方法来判断某个 URL 是否被允许访问。在这个示例中,我们判断了谷歌的搜索页面是否被允许访问。

解析规则和实现原理

robots-txt-guard 使用了一个类 RobotsParser 来解析 robots.txt 文件,这个类包含以下几个主要函数:

  1. parseUserAgent(userAgent, rules):用于解析 robots.txt 文件中某一段区域对某个 UA 的控制规则。
  2. parseRules(url, rules):用于解析 URL 对应的路径在 robots.txt 文件中的控制规则。
  3. isAllowed(url):用于判断一个 URL 是否被允许访问。
  4. getCrawlDelay(url):获取抓取间隔时间。

在解析 robots.txt 文件时,首先将文件按行拆分,再进行解析。对于每一行,首先去掉首尾的空格和注释,然后根据 : 符号将其分为属性和值两部分。如果属性为 User-agent,则表示该行对某个 UA 的控制规则,否则该行为某个 UA 对某个路径的控制规则。

在判断某个 URL 是否被允许访问时,首先将 URL 拆分成 path 和 query 两个部分。然后,从 RobotsParser 实例中获取该 URL 所在的规则,并遍历该规则对应的所有控制规则。对于每个控制规则,先判断其 User-agent 是否适用于当前 UA,如果适用则进一步判断 Allow 或 Disallow 规则是否匹配当前 URL。匹配规则参见 robots.txt 的语法规范。

总结

通过使用 npm 包 robots-txt-guard,我们可以实现对 robots.txt 文件中规则的解析,并且根据规则判断某个 URL 是否被允许访问。这对于网站攻防来说是非常有意义的,因为由于一些历史原因,一些网站的 robots.txt 文件可能被黑客篡改,从而导致搜索引擎收录了一些敏感信息。使用 robots-txt-guard,可以保证我们的网站不会因为被搜索引擎收录敏感信息而造成损失。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/robots-txt-guard