
# 配置网站反爬虫防护规则防御爬虫攻击
您可以通过配置网站反爬虫防护规则，防护搜索引擎、扫描器、脚本工具、其它爬虫等爬虫，以及自定义JS脚本反爬虫防护规则。
#### JS脚本反爬虫检测机制
JS脚本检测流程如[图1]所示，其中，①和②称为"JS挑战"，③称为"JS验证"。
图1JS脚本检测流程说明   
![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002383747496.png "点击放大")
开启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次。
图2JS脚本反爬虫防护数据   
![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002383587644.png "点击放大")
![](https://support.huaweicloud.com/usermanual-waf/public_sys-resources/note_3.0-zh-cn.png)
网站反爬虫"JS挑战"的防护动作为"仅记录"，"JS验证"的防护动作为人机验证（即JS验证失败后，弹出验证码提示，输入正确的验证码，请求将不受访问限制）。
#### 约束条件
| 类别        | 约束说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|
| 接入方式与版本限制 | - **特征反爬虫** ： - **云模式** **-CNAME接入/云模式-ELB接入** ：仅**标准版** 、**专业版** 、**企业版**支持该功能。  - **独享模式接入**：支持该功能。    - **JS脚本反爬虫** ： - **云模式** **-CNAME接入** ：仅**专业版** 、**企业版**支持该功能。  - **云模式-ELB接入**：不支持该功能。  - **独享模式接入**：支持该功能。     |
| 规则生效时间    | 添加或修改防护规则后，规则生效需要等待几分钟。规则生效后，您可以在"防护事件"页面，[查看防护效果](https://support.huaweicloud.com/usermanual-waf/waf_01_0156.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| JS脚本反爬虫   | - 该功能依赖浏览器的Cookie机制、JavaScript解析能力，如果客户端浏览器不支持Cookie，此功能无法使用，开启后会造成永远无法访问源站。  - 如果您的业务接入了CDN服务，请谨慎使用JS脚本反爬虫。 由于CDN缓存机制的影响，JS脚本反爬虫特性将无法达到预期效果，并且有可能造成页面访问异常。   - 按需计费方式购买的WAF不支持该功能。  - 仅支持get请求，不支持post请求。                                                                                                                                                                                                           |
| 防护动作      | - 网站反爬虫"JS挑战"的防护动作为"仅记录"，"JS验证"的防护动作为人机验证（即JS验证失败后，弹出验证码提示，输入正确的验证码，请求将不受访问限制）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   
#### 前提条件
- 已[将网站成功接入WAF](https://support.huaweicloud.com/usermanual-waf/waf_01_1108.html)。
- 如果使用独享WAF，确保独享引擎已升级到最新版本，具体的操作请参见[升级独享引擎实例](https://support.huaweicloud.com/usermanual-waf/waf_01_0253_4.html)。
 
#### 配置网站反爬虫防护规则
1. [登录Web应用防火墙控制台](https://console.huaweicloud.com/waf/?locale=zh-cn)。
2. 在控制台左上角，单击![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002304713360.png)图标，选择区域或项目。
3. (可选) 如果您已开通企业项目，在左侧导航栏上方单击"按企业项目筛选"下拉框，选择您所在的企业项目。完成后，页面将为您展示该企业项目下的相关数据。
4. 在左侧导航栏，选择"防护策略 \> WAF核心防护"。
5. 在防护策略列表，单击目标策略名称，进入目标策略的防护规则配置页面。 
   您也可以在"资产管理 \> 防护对象"页面，单击目标域名"防护策略"列的"已开启防护项"后的数字，进入网站绑定的防护策略的规则配置页面。
   
   
6. 单击"网站反爬虫"配置框，确认已开启网站反爬虫防护规则。
   
   ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000001761737873.png)：开启状态。
   
   
7. 在"特征反爬虫"页签，根据您的业务场景，配置命中特征反爬虫规则的防护动作、要执行检测的类型，如[图3]所示，检测项说明如[表1]所示。
   
   图3特征反爬虫防护   
   ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002383820476.png "点击放大")
   - **防护动作** ：设置请求命中规则时要执行的处置动作：
     - **拦截** ：发现攻击行为后立即阻断并记录。
       ![](https://support.huaweicloud.com/usermanual-waf/public_sys-resources/caution_3.0-zh-cn.png)
       开启拦截后，可能会有以下影响 ：
       - 拦截搜索引擎请求，可能影响网站的搜索引擎优化。
       
       - 拦截脚本工具，可能会影响部分APP访问（部分APP的User-Agent未做修改，会匹配脚本工具类爬虫规则）。
         
     
     - **仅记录**（默认）：发现攻击行为后只记录不阻断攻击。
      
   
   - **检测类型** ：WAF默认开启"扫描器"防护检测，您可以根据业务需要，配置要防护的检测类型。
      表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将检测并阻断各类用途的爬虫程序。                                                                                                                                                                                                                                                      |
        
     
   
   
   
   
   
8. 在"JS脚本反爬虫"页签，配置JS脚本反爬虫规则。 
   ![](https://support.huaweicloud.com/usermanual-waf/public_sys-resources/caution_3.0-zh-cn.png)
   - 该功能依赖浏览器的Cookie机制、JavaScript解析能力，如果客户端浏览器不支持Cookie，此功能无法使用，开启后会造成永远无法访问源站。
   
   - 如果您的业务接入了CDN服务，请谨慎使用JS脚本反爬虫。 由于CDN缓存机制的影响，JS脚本反爬虫特性将无法达到预期效果，并且有可能造成页面访问异常。
     
    
   图4JavaScript   
   ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002418037045.png "点击放大")
   - **状态** ：配置"JS脚本反爬虫"启用状态。
     - ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002384397848.png)：开启状态。
     
     - ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002384237948.png)（默认）：关闭状态。
      
   
   - **防护动作** ：设置请求命中规则时要执行的处置动作。
     - **拦截**：表示拦截命中规则的请求，并向发起请求的客户端返回拦截响应页面。
     
     - **仅记录**：表示不拦截命中规则的请求，只通过日志记录防护信息。
     
     - **人机验证**：表示JavaScript挑战失败，弹出验证码提示，输入正确的验证码，请求将不受访问限制。
      
   
   - **防护模式** ：选择"JS脚本反爬虫"的防护模式。
     - **防护所有请求** ：除了指定请求规则以外，防护其他所有请求，即规则状态为开启的防护规则不在防护范围内。单击"添加排除请求规则"，添加要排除的规则，相关参数说明如[表2]所示。
     
     - **防护指定请求** ：只防护指定请求，即没有添加指定防护路径"/"请求或规则状态为关闭的，则表示所有路径"/"请求不在防护范围内。单击"防护指定请求"，添加要防护的规则，相关参数说明如[表2]所示。
     
     
      表2JS脚本反爬虫参数说明 
     | 参数   | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 示例              |
     |:---|:---|:---|
     | 规则名称 | 自定义规则名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | waf             |
     | 规则描述 | 设置该规则的备注信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | -               |
     | 条件列表 | 配置要匹配的请求特征。请求一旦命中该特征，WAF则按照配置的规则处置该请求。 - 至少需要配置一项，本条规则才能生效。配置多个条件时，需同时满足，本条规则才生效。  - 单击"添加条件"增加新的条件，最多可添加30个条件。   条件设置参数说明如下： - **字段**：在下拉列表中选择需要检测的字段，当前仅支持"路径"、"User Agent"。  - **子字段**："路径"、"User Agent"字段无需设置子字段。  - **逻辑**：在"逻辑"下拉列表中选择需要的逻辑关系。  - **内容** ：输入或者选择条件匹配的内容。 当"逻辑"关系选择"包含任意一个"、"不包含任意一个"、"等于任意一个"、"不等于任意一个"、"前缀为任意一个"、"前缀不为任意一个"、"后缀为任意一个"或者"后缀不为任意一个"时，需要选择[引用表](https://support.huaweicloud.com/usermanual-waf/waf_01_0081.html)。   - **大小写敏感**："字段"选择"路径"时，可配置该参数。开启后，系统在检测配置的路径时，将区分大小写。能够帮助系统更准确地识别和处理各种爬虫请求，从而有效提升反爬虫策略的精确度和有效性。   | "路径"包含"/admin/" |
     | 生效时间 | 规则添加后，立即生效。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 立即生效            |
     | 优先级  | 设置该条件规则检测的顺序值。如果您设置了多条规则，则多条规则间有先后匹配顺序，即访问请求将根据您设定的优先级依次进行匹配，优先级较小的规则优先匹配。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 5               |
        
     完成以上配置后，您还可以执行以下操作：
     - **查看规则状态**：在防护规则列表，查看已添加的规则。此时，"规则状态"默认为"已开启"。
     
     - **关闭规则**：如果您暂时不想使该规则生效，可在目标规则"操作"列，单击"关闭"。
     
     - **删除或修改规则**：您也可以在目标规则"操作"列，单击"删除"或"修改"，删除或修改已添加的防护规则。
      
   
   
   
   
 
#### 配置示例
您可以参考以下配置示例，配置网站反爬虫规则。
#### 仅记录脚本工具爬虫
假如防护域名"www.example.com"已接入WAF，您可以参照以下操作步骤验证反爬虫防护效果。
1. 执行JS脚本工具，爬取网页内容。
2. 单击"网站反爬虫"配置框，确认已开启网站反爬虫防护规则。 
   ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000001761737873.png)：开启状态。
   
   
3. 在"特征反爬虫"页签，开启"脚本工具"，"防护动作"设置为"仅记录"（WAF检测为攻击行为后，只记录不阻断）。 
   图5开启"脚本工具"   
   ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000001226308155.png "点击放大")
   
   
4. 在左侧导航树中，单击"防护事件"，进入"防护事件"页面，您可以查看该防护事件。 
   图6查看防护事件-脚本爬虫   
   ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000001828597170.png "点击放大")
   
   
 
 #### 搜索引擎
放行百度或者谷歌的搜索引擎，同时拦截百度的POST请求。
1. 参照[6]将"搜索引擎"设置为放行，即将"搜索引擎"的"状态"设置为![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000001746598250.png)。
2. 参照[配置精准访问防护规则定制化防护策略](https://support.huaweicloud.com/usermanual-waf/waf_01_0010.html)配置如[图7]的规则。
   
   图7拦截POST请求   
   ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002156988081.png "点击放大")
   
   
 
#### 常见问题
- [开启JS脚本反爬虫后，为什么客户端请求获取页面失败？](https://support.huaweicloud.com/waf_faq/waf_01_0254.html)
- [开启JS脚本反爬虫后，为什么有些请求被WAF拦截但查不到拦截记录](https://support.huaweicloud.com/waf_faq/waf_01_0254.html)
 
