您必须在应用中集成SDK,才能配置网页防爬场景化规则。本文介绍了如何为Web应用集成WAF防护SDK(以下简称SDK)。
组件
Web SDK集成包括Web采集器、异步接口响应组件。
Web采集器
Web采集器将客户端浏览器或容器环境下的特征纳入整体antibot攻防体系,进一步识别出多种网络层特征无法覆盖的攻击手法,提升攻防效果。
Web采集器采集到的特征经过混淆加密后,在根域名下植入cookie,并通过请求上报,对性能影响较小。
Web采集器采集的内容主要分为三部分:
浏览器或容器环境信息:常见的如浏览器型号版本、屏幕分辨率、时区特性与时间戳等。
特定攻防探针:主要是针对一些常见的浏览器级别Bot脚本、driver、自动化容器的探针。
用户操作行为:主要指用户在页面上的鼠标、键盘、触屏事件。
说明出于隐私考虑,键盘只会采集击键时间,不会采集具体按下了哪个键。
异步接口响应组件
异步接口响应组件使Web应用程序能在API接口上响应antibot攻防体系下发给客户端的挑战(目前包括JS校验和Captcha挑战)。采用此组件后,如果WAF给某一API接口下发挑战response,异步接口响应组件探测到该挑战response后,会作出响应。
异步接口响应组件为纯功能性组件,不涉及任何安全功能,不会进行任何数据采集或上报。
异步接口响应组件工作原理如下:
异步接口响应组件会全局重写页面上的xmlHttpRequest(xhr)、Fetch、Form等通用的API接口请求对象,在API接口请求对象上额外封装一层代码,不会影响原始对象的各种特性。
Hook完毕后,异步接口响应组件会先于页面上的其他JS代码,判断请求的response是否为WAF返回客户端的挑战类处置手段(JS校验与captcha挑战)。
如果发现response并非WAF返回(而是源站返回),异步接口响应组件不会执行任何响应,会把response处理权限向下透传给网站本身的JS代码。如果发现response是WAF返回的,异步接口响应组件会解析返回的response中的算法内容、执行WAF要求的JS运算、并在运算之后携带JS校验验证签名重新发起请求。该重新发起的请求会被WAF验签放过,成功回源。
兼容性说明
环境兼容性:兼容IE8内核以上各类浏览器与客户端容器。
兼容性依赖:客户端请求可以正常携带cookie上报。容器或请求本身不支持cookie,则组件功能会被影响。
Hook兼容:对于一些特殊业务,异步API接口的请求本身采用的hook原生XHR、form、Fetch等对象会与异步接口响应组件产生冲突。
部署方式
自动集成
自动集成需要网站HTML页面请求经由WAF。无需客户网页代码改造即可部署完成,并且可以享受线上热更新。
在配置网页防爬场景化的防护场景定义时,选择自动集成后,Bot管理在处理HTML页面response时,会主动将HTML格式解开,并将Web采集器组件、异步接口处理组件插入到dom结构中,并返回给客户端。更多信息,请参见配置防护场景定义。
对于已经压缩的HTML页面,目前注入式部署只支持content-encoding:gzip的压缩方式,暂不支持br与deflate压缩。
手工集成
适合于无法满足自动集成的场景,包括HTML页面流量没有经过antibot攻防体系,或压缩类型不支持等。需要满足两个原则:
所有需要依赖antibot攻防体系挑战处置的API接口,所在的HTML页面都必须接入此SDK。
获取SDK链接。访问BOT管理页面,在场景化防护页签,单击新建模板,在防护场景定义配置向导页面,配置Web SDK集成时,选择手动集成后单击获取SDK链接。请将如下<script>节点置于页面上所有其他<script>节点之前以保证最先加载:
<script src="//g.alicdn.com/frontend-lib/frontend-lib/2.3.66/jquery_240828.min.js"></script>
本地化式部署
该部署方案仅用于某些特殊情况,如页面csp不允许从alicdn上加载资源,或因为某些原因需要将所有组件完全本地化到自身业务域名下。不推荐采用该方式部署。
若要本地化部署,您可以在本地域名下新建两份JS资源,将CDN上JS中的代码内容全部拷贝到本地,然后采用类似“SDK接入式部署”的原则将本地化的JS资源加载到页面。