跳转至

站长助手-反爬设计详解

介绍

对web网站进行保护,有效防止程序爬取,基础网站攻击

功能实现

浏览器验证

智能验证请求客户端是否为浏览器

首次访问验证

客户端第一次请求web服务器,安全防护下发js代码,验证请求是否来自客户端(给客户端种入cookie1--session记录,cookie2--指纹信息有效期1分钟),如果验证成功,在将请求发送给后端web服务器。
由于客户端第一次请求,正常请求为浏览器发送的GET请求,所以下发js,让客户端执行,并且上传执行结果,重新发送客户端请求,不会导致客户端正常使用受到影响,进而不会影响到正常用户
可能问题

  • 第一次请求非GET html的请求
    如网站A引用本站的js,css等资源,需要使用加白功能进行处理
  • API接口调用
    影响直接调用JSON数据接口,需要使用加白功能进行处理

多次校验

主要解决客户端抓取校验用的cookie 重放数据包,绕过首次访问验证

用户访问过程中,选择随机时间点,再次执行首次访问校验功能, 由于再次校验的时间随机, 用户操作的功能比较复杂,需要判断是否满足验证条件, 在保证不影响用户正常操作的情况下进行校验,选择类似首次访问验证场景(返回状态码200 请求为GET方法, 返回类型为text/html,返回内容包含 <html ), 同时验证时,预留1分钟的时间窗口(1分钟内完成校验即可) 防止对一些并发请求造成干扰

可能问题

  • 下发时机
    主要是选择校验时机, 经过测试上述条件基本上可以保证绝大多数场景正常
  • 缓存问题
    当请求的页面未发生变化,服务端返回304状态码,会导致页面一直刷新,需要在下发的js中,设置禁止客户端缓存页面

服务端下发的JS主要是为了客户端设置一个特定cookie, 有效期设置为1分钟, 如果大于2分钟,客户端仍然发送该cookie则认为是重放攻击,进行人机校验

针对无头浏览器识别

无头浏览器是一类特殊爬虫,与真实浏览器类似,可以解析html,执行js,速度比脚本爬虫要慢一些

目前的一些检测方案无头浏览器检测 需要继续跟进,在本版本中, 当多次检测浏览器时,会判断ua及webdriver

返回内容编码

在不影响用户使用的情况下,对网站返回的html进行编码输出

严格校验,只对 返回状态码200 请求为GET方法 返回类型为text/html,对页面包括 <html 和 的页面进行编程

接收所有返回内容,使用base64进行编码

屏蔽错误信息

禁止返回错误状态码和错误页面信息,可自定义错误页面

人机识别

当检测到异常

  • 大于2分钟 仍然携带设置的cookie请求
  • 多次校验时,上传的cookie值与前一次不符
  • 持续在线时间大于5个小时

需要用户手动输入验证码,进行操作

加白功能

针对URL/客户端IP/搜索引擎 进行加白
目前支持搜索引擎 baidu,google,sogou,bing 等主流搜索引擎

后台管理功能

支持 web后台管理,方便查看和修改配置