Web 应用防火墙 (WAF)

Web 应用程序防火墙(WAF)旨在保护 Web 应用程序免遭多种网络攻击,如跨站脚本攻击(XSS)、SQL 注入等威胁。

参数说明

参数名数据类型是否必选描述
rule_setsarray需要启用的规则集合名称列表
actionstring触发 WAF 防护时执行的动作,可选 logblock 或其别名 403 Forbiddenedge-captchahcaptcharedirectpage-templateclose-connectionredirect-validatejs-challengecustom-actionpat-attest
sensitivitystringWAF 防护敏感级别,选项有 high(高)、medium(中)、low(低)、none(无)
scorenumbersensitivity 设置为 none 时,可自定义敏感度分数
clearancenumber验证码触发后的有效期,缺省值为 60 秒
redirect_urlstring当行为设置为 redirect 时,所指定的重定向 URL
page_template_namestring全局页面模板名称。page-template 动作,或 pat-attestfallback_actionpage-template 时必填
page_template_status_codenumberpage-template 动作返回的 HTTP 状态码。pat-attest 不支持该参数
module_namestringLua 模块名称。actioncustom-action 时必填
fallback_actionstringpat-attest 校验失败时执行的挑战,可选 edge-captchahcaptchajs-challengepage-template,默认为 edge-captcha
cross_requestsbool设置为 true 时开启跨请求模式,默认值为 true,推荐设置为 false
rule_sets_thresholdarray为各规则集单独设置敏感度分数,需与 rule_sets 中的规则集一一对应

您可以选择使用内置规则集或自定义 WAF 规则集。以下为可用的内置 WAF 规则集列表:

  • scanner_detection
  • protocol_enforcement
  • protocol_attack
  • application_attack_lfi
  • application_attack_rfi
  • application_attack_rce
  • application_attack_php
  • application_attack_nodejs
  • application_attack_xss
  • application_attack_sqli
  • application_attack_session_fixation
  • application_attack_java

配置示例

- enable_rule: true
  conditions:
  - op: eq
    var: uri
    val: /waf

  waf:
    rule_sets:
    - scanner_detection
    - protocol_enforcement
    - application_attack_xss
    - application_attack_sqli
    sensitivity: medium
    action: "403 Forbidden"
    cross_requests: false

在上述示例中,当请求的 URI/waf 时,启用 WAF,启用的的规则集包括 scanner_detection、protocol_enforcement、application_attack_xss 及 application_attack_sqli,防护敏感级别设定为中等。一旦触发 WAF 防护机制,则执行动作并返回 HTTP 状态码 403,表示请求被禁止。

以下示例使用 sentinel Lua 模块执行自定义 WAF 动作:

- enable_rule: true
  conditions:
  - op: eq
    var: uri
    val: /custom-action

  waf:
    rule_sets:
    - scanner_detection
    action: custom-action
    module_name: sentinel

以下示例校验 Private Access Token,失败时返回名为 pat-tmpl 的全局页面模板。导入时,edge2yaml 会把模板名称转换为 ID;导出时会恢复为名称。pat-attest 不应设置 page_template_status_code

- enable_rule: true
  conditions:
  - op: eq
    var: uri
    val: /pat-attest

  waf:
    rule_sets:
    - scanner_detection
    action: pat-attest
    fallback_action: page-template
    page_template_name: pat-tmpl