网站反爬虫_Web应用防火墙_防恶意BOT攻击

Web应用防火墙(Web Application Firewall,WAF),通过对HTTP(S)请求进行检测,识别并阻断SQL注入、跨站脚本攻击、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第三方应用漏洞攻击、CC攻击、恶意爬虫扫描、跨站请求伪造等攻击,保护Web服务安全稳定。


华为云Web应用防火墙WAF通过动态分析网站业务模型,结合人机识别技术和数据风控手段,精准识别700+种爬虫行为。

◆ 特征反爬虫

自定义扫描器与爬虫规则,用于阻断网页爬取行为,添加定制的恶意爬虫、扫描器特征,使爬虫防护更精准。

◆ JS脚本反爬虫

通过自定义规则识别并阻断JS脚本爬虫行为。


配置网站反爬虫,拦截恶意BOT攻击

如何配置网站反爬虫防护规则?

您可以通过配置网站反爬虫防护规则,防护搜索引擎、扫描器、脚本工具、其它爬虫等爬虫,以及自定义JS脚本反爬虫防护规则。

说明:如果您已开通企业项目,您需要在“企业项目”下拉列表中选择您所在的企业项目并确保已开通操作权限,才能为该企业项目下域名配置防护策略。

前提条件

● Web应用防火墙WAF已添加防护网站。

○ 云模式的接入方式参见网站接入WAF(云模式)章节。

○ 独享模式的接入方式参见网站接入WAF(独享模式)章节。

约束条件

● JS脚本反爬虫依赖浏览器的Cookie机制、JavaScript解析能力,如果客户端浏览器不支持Cookie,此功能无法使用。

● JS如果您的业务接入了CDN服务,请谨慎使用JS脚本反爬虫。

● JS由于CDN缓存机制的影响,JS脚本反爬虫特性将无法达到预期效果,并且有可能造成页面访问异常。

● JS入门版和标准版(原专业版)不支持该功能。

● JS目前华北-北京一、华北-北京四、华东-上海一、华东-上海二、华南-广州、华南-深圳、西南-贵阳一、中国-香港、亚太-曼谷区域支持JS脚本反爬虫功能。

● JS开启JS脚本反爬虫后,如果不能查看拦截记录,请参见开启JS脚本反爬虫后,为什么有些请求被WAF拦截但查不到拦截记录?

● JS网站反爬虫“js挑战”和“js验证”的防护动作为仅记录,WAF不支持配置“js挑战”和“js验证”的防护动作。

● JSWAF的JS脚本反爬虫功能只支持get请求,不支持post请求。

JS脚本反爬虫检测机制

JS脚本检测流程如图1所示,其中,①和②称为“js挑战”,③称为“js验证”。

图1 JS脚本检测流程说明

开启JS脚本反爬虫后,当客户端发送请求时,WAF会返回一段JavaScript代码到客户端。

• 如果客户端是正常浏览器访问,就可以触发这段JavaScript代码再发送一次请求到WAF,即WAF完成js验证,并将该请求转发给源站。

• 如果客户端是爬虫访问,就无法触发这段JavaScript代码再发送一次请求到WAF,即WAF无法完成JS验证。

• 如果客户端爬虫伪造了WAF的认证请求,发送到WAF时,WAF将拦截该请求,JS验证失败。

通过统计“JS挑战”和“JS验证”,就可以汇总出JS脚本反爬虫防御的请求次数。例如,图2中JS脚本反爬虫共记录了18次事件,其中,“JS挑战”(WAF返回JS代码)为16次,“JS验证”(WAF完成JS验证)为2次,“其他”(即爬虫伪造WAF认证请求)为0次。

图2 JS脚本反爬虫防护数据

须知:

“JS挑战”和“JS验证”的防护动作为仅记录,WAF不支持配置“JS挑战”和“JS验证”的防护动作。

操作步骤

1.登录华为云管理控制台

2. 单击管理控制台左上角的,选择区域或项目。

3.单击页面左上方的,选择“安全与合规 > Web应用防火墙 WAF”。

4.在左侧导航树中,选择“网站设置”,进入“网站设置”页面。

5.(旧版)在目标域名所在行的“防护策略”栏中,单击“配置防护策略”,进入“防护策略”页面。

6.(新版)在目标域名所在行的“防护策略”栏中,单击“已开启N项防护”,进入“防护策略”页面。

图3 域名列表

7. 在“网站反爬虫”配置框中,用户可根据自己的需要参照图4更改网站反爬虫的“状态”,单击“网站反爬虫设置”,进入网站反爬虫规则配置页面。

图4 网站反爬虫配置框

8. 选择“特征反爬虫”页签,根据您的业务场景,开启合适的防护功能,如图5所示,检测项说明如表1所示。

特征反爬虫规则提供了两种防护动作:

• 拦截

发现攻击行为后立即阻断并记录。

• 仅记录

默认防护动作,发现攻击行为后只记录不阻断攻击。

默认开启“扫描器”防护检测,用户可根据业务需要,配置防护动作并开启其他需要防护的检测类型。

图5 特征反爬虫防护

表1 特征反爬虫检测项说明

参数
参数说明
取值样例

搜索引擎

搜索引擎执行页面内容爬取任务,如Googlebot、Baiduspider。

开启后,WAF将检测并阻断搜索引擎爬虫。

说明:如果不开启“搜索引擎”,WAF针对谷歌和百度爬虫不会拦截,如果您希望拦截百度爬虫的POST请求,可参照配置示例-搜索引擎进行配置。

扫描器

执行漏洞扫描、病毒扫描等Web扫描任务,如OpenVAS、Nmap。

开启后,WAF将检测并阻断扫描器爬虫。

脚本工具

用于执行自动化任务、程序脚本等,如httpclient、okhttp、python程序等。

开启后,WAF将检测并阻断执行自动化任务、程序脚本等。

说明:如果您的应用程序中使用了httpclient、okhttp、python程序等脚本工具,建议您关闭“脚本工具”,否则,WAF会将使用了httpclient、okhttp、python程序等脚本工具当成恶意爬虫,拦截该应用程序。

其他爬虫

各类用途的爬虫程序,如站点监控、访问代理、网页分析等。

说明:“访问代理”是指当网站接入WAF后,为避免爬虫被WAF拦截,爬虫者使用大量IP代理实现爬虫的一种技术手段。

开启后,WAF将检测并阻断各类用途的爬虫程序。

9.选择“JS脚本反爬虫”页签,用户可根据业务需求更改JS脚本反爬虫的“状态”“防护模式”

默认关闭JS脚本反爬虫,单击,在弹出的“警告”提示框中,单击“确定”,开启JS脚本反爬虫

须知:

• JS脚本反爬虫依赖浏览器的Cookie机制、JavaScript解析能力,如果客户端浏览器不支持Cookie,此功能无法使用。

• 如果您的业务接入了CDN服务,请谨慎使用JS脚本反爬虫。

由于CDN缓存机制的影响,JS脚本反爬虫特性将无法达到预期效果,并且有可能造成页面访问异常。

10.根据业务配置JS脚本反爬虫规则,相关参数说明如表2所示。

JS脚本反爬虫规则提供了“防护所有路径”“防护指定路径”两种防护动作。

• 除了指定路径以外,防护其他所有路径:

选择“防护所有路径”,在JS脚本反爬虫规则的配置页面左上角,单击“添加排除防护路径”,配置防护路径后,单击“确定”。

图6 添加排除防护路径

• 只防护指定路径时:

选择“防护指定路径”,在JS脚本反爬虫规则的配置页面左上角,单击“添加防护路径”,配置防护路径后,单击“确定”。

图7 添加指定防护路径

表1 特征反爬虫检测项说明

参数
参数说明
说明

规则名称

自定义规则名称。

wafjs

路径

设置JS脚本反爬虫的URL链接中的路径(不包含域名)。

URL用来定义网页的地址。基本的URL格式如下:

协议名://域名或IP地址[:端口号]/[路径名/…/文件名]。

例如,URL为“http://www.example.com/admin”,则“路径”设置为“/admin”。

说明:

• 该路径不支持正则。

• 路径里不能含有连续的多条斜线的配置,如“///admin”,WAF引擎会将“///”转为“/”。

/admin

逻辑

“逻辑”下拉列表中选择需要的逻辑关系。

包含

规则描述

规则备注信息。

-

相关操作

● 规则添加成功后,默认的“规则状态”为“已开启”,若您暂时不想使该规则生效,可在目标规则所在行的“操作”列,单击“关闭”。

● 若需要修改添加的JS脚本反爬虫规则,可单击待修改的路径规则所在行的“修改”,修改该规则。

● 若需要删除添加的JS脚本反爬虫规则时,可单击待删除的路径规则所在行的“删除”,删除该规则。

配置示例-仅记录脚本工具爬虫

假如防护域名“www.example.com”已接入WAF,您可以参照以下操作步骤验证反爬虫防护效果。

1.执行JS脚本工具,爬取网页内容。

2. 在“特征反爬虫”页签,开启“脚本工具”“防护动作”设置为“仅记录”(WAF检测为攻击行为后,只记录不阻断)。

图8 开启“脚本工具”

3.开启网站反爬虫。

图9 网站反爬虫配置框

4.在左侧导航树中,单击“防护事件”,进入“防护事件”页面,您可以查看该防护事件。

图10 查看防护事件-脚本爬虫

配置示例-搜索引擎

放行百度或者谷歌的搜索引擎,同时拦截百度的POST请求。

1.参照7将“搜索引擎”设置为放行,即将“搜索引擎”的“状态”设置为

2.参照配置精准访问防护规则配置如图11的规则。

图11 拦截POST请求

网站反爬虫常见问题

常见问题

  • 开启JS脚本反爬虫后,为什么客户端请求获取页面失败?

    开启JS脚本反爬虫后,当客户端发送请求时,WAF会返回一段JavaScript代码到客户端。如果客户端是正常浏览器访问,就可以触发这段JavaScript代码再发送一次请求到WAF,即WAF完成JS验证,并将该请求转发给源站,如图1所示。

    图1 JS脚本反爬虫正常检测流程

    • 如果客户端是爬虫访问,就无法触发这段JavaScript代码再发送一次请求到WAF,即WAF无法完成js验证。

    • 如果客户端爬虫伪造了WAF的认证请求,发送到WAF时,WAF将拦截该请求,js验证失败。

    须知:

    • 开启JS脚本反爬虫,要求客户端浏览器具有JavaScript的解析能力,并开启了Cookie。

    • 如果客户端不满足以上要求,则只能完成①和②,此时客户端请求将不能成功获取到页面。

    请您排查业务侧是否存在这种场景。如果您的网站有非浏览器访问的场景,建议您关闭JS脚本反爬虫功能。

  • 开启网站反爬虫中的“其他爬虫”会影响网页的浏览速度吗?

    在配置网站反爬虫的“特征反爬虫”时,如果开启了“其他爬虫”,如图1所示,WAF将对各类用途的爬虫程序(例如,站点监控、访问代理、网页分析)进行检测。开启该防护,不影响用户正常访问网页,也不影响用户访问网页的浏览速度。

    图1 开启“其他爬虫”

    有关配置网站反爬虫的详细操作,请参见配置网站反爬虫规则

1对1咨询华为云专属顾问,快速了解Web应用防火墙

免费咨询