chaihongjun.me

nginx配置网站只允许用户访问屏蔽所有蜘蛛

   部门最近新上了一个WEB系统,用于考核编辑人员的工作,记录工作绩效。在部署的时候初期考虑安全因素放在内网环境中,但是在实际准备过程中发现,如果放在内网,需要设置端口映射等操作,有可能影响内网服务器正在运行的其他服务,而且一旦不在内网环境内就不好去查看系统的一些数据,实际部署到外网环境没什么特别大的安全隐患,系统是由关系很好的第三个公司提供,他们几年的经验之作,仅仅是做为内部使用,在此表示再一次的感谢!!!

  但是出于安全考虑,还是决定在外网环境(阿里云)下一个基本的设置。为了方便工作,考核系统链接放到了部门博客页脚,虽然链接做了nofollow处理,但是仍然有可能被蜘蛛爬取甚至索引,甚至放出快照,从而一不小心就被更多人发现,成为攻击的目标,所以想到配置服务器,让正常的用户可以使用该系统,当是蜘蛛来的时候则返回403,禁止蜘蛛爬取。测试结果如下:

nginx屏蔽蜘蛛

nginx配置正常,webkit内核浏览器

nginx配置网站只允许用户访问屏蔽所有蜘蛛

具体配置如下:

#判断UA,如果UA不包含spider或者bot(不区分大小写),表示UA为正常用户
# 设置变量 is_human 值为 yes
if ($http_user_agent !~* "spider|bot") { 
    set $is_human 'yes';
}

#当有任意请求的时候,该UA不是正常用户,则表示应该是蜘蛛类程序,则返回403
location / {
    if ($is_human != 'yes') {
        return 403;
    }
}

当然,还可以再完善点,给系统添加了robots.txt文件

User-agent: *
Disallow: /

这样,基本蜘蛛就是知道有系统的存在也无法抓取到任何内容。

当然前面的规则可以再优化合并一下:

#对于网站文件有任意匹配
location / {
        # 首先判断访问UA,如果UA包含spider或者bot,可以认为不是正常用户,是蜘蛛类程序
      if ($http_user_agent ~* "spider|bot")
              {
                   # 就禁止蜘蛛反问页面的任意文件
                    return 403;
                     
               }
}


知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»