边缘安全加速平台 EO Condition

这篇档介绍了各功能模块中条件表达式支持的语法内容和书写规范。不同功能模块的条件表达式均采用统一的结构格式,具体支持的目标字段、运算符和值类型可能因模块而异。

相关产品
边缘安全加速平台 EO 产品页,含版本规格、价格与购买入口。

一、表达式结构

条件表达式由三个基本组成部分构成:目标字段、运算符和值,其基本格式如下:

·目标字段:通常为 ${…} 形式的内置 变量,例如 ${http.request.uri.path}、${http.request.method} 等,用于提取请求中的特定信息。

·运算符:例如 in、matches、exists 等,用于判断目标字段与值之间的关系。

·值:可以是字符串、数字、列表或其他变量,需根据运算符使用方括号 [ ] 包裹,例如 ['POST'] 或 [100, 200]。

二、匹配运算符

名称 关键字 支持的数据类型 示例 支持的功能模块
值在集合内 in String、Number说明:Number 支持整型、浮点。集合支持常值和变量。 ${http.request.file_extension} in ["jpg", "png"] 站点加速、边缘函数、Web 防护
正则匹配 matches 仅支持 String说明:仅支持通过常值字符串定义的正则表达式。 ${http.request.uri.path} matches "^/admin/" 站点加速、边缘函数、Web 防护
存在 exists 不限定数据类型说明:该运算符检查字段(键 / 属性)是否存在,不检查字段值。 ${http.request.uri.args["status"]} exists 站点加速、边缘函数、Web 防护
通配符匹配 like 仅支持 String ${http.request.uri.path} like ["/staging/*", "/prod/*"] Web 防护
包含匹配 contain 仅支持 String ${http.request.uri.path} contain ["api", "login"] Web 防护
大于 > 仅支持 Number length(${http.request.headers["user-agent"]}) > 30 Web 防护
小于 < 仅支持 Number length(${http.request.headers["user-agent"]}) < 10 Web 防护

三、逻辑运算符

当前的功能模块均支持该运算符规则,多个条件可通过逻辑运算符组合:

·and:逻辑与,所有子条件均为真时返回真(例如 A and B)。

·or:逻辑或,任一子条件为真时返回真(例如 A or B)。

·not:逻辑非,对一个布尔表达式取反(例如 not A)。

运算符优先级为:not > and > or,可使用括号( ) 改变运算顺序。例如:

//表示“同时满足 A 条件,且(满足 B 条件或不满足 C 条件)”。 ${A} and (${B} or not ${C})

四、表达式书写注意事项

·变量格式:目标字段变量必须用 ${} 括起,内部支持点式和索引式访问,例如 ${http.request.headers['User-Agent']}、${security.ip_group['123'@'zone-xyz']} 等。

·值类型:字符串值必须用单引号括起并放在列表中,例如 in ['value1','value2'];数字值可直接写如 > 100;空值使用特殊关键字 null(参考特殊变量)。

·列表形式:即使只有一个值,也需写成列表形式(方括号包裹),例如 in ['POST'] 或 in [200]。

·引号与转义:列表中的字符串用单引号,内部如果包含特殊字符(例如 @、. 等)无需额外转义。

·大小写:操作符统一使用小写(如 and、or、not、in、like、contain),字段名称区分大小写(例如 User-Agent 与 user-agent 不同)。

注意:条件匹配默认区分大小写。如需忽略大小写,请使用转换函数:lower(${http.request.uri.args['Test']}) in ['a', 'b']。

五、更多示例

以下是一些典型条件表达式的用法说明和对应代码:

1. 匹配特定路径和请求方法

当请求路径为 /api/v3/test 或 /api/v3/submit,且 HTTP 请求方法为 POST 时触发。

${http.request.uri.path} in ['/api/v3/test','/api/v3/submit'] and ${http.request.method} in ['POST']

2. 匹配客户端 IP 或 ASN

匹配客户端 IP 地址为 1.1.1.1、属于子网 10.10.10.0/24,或其自治系统号(ASN)为 132203 的请求。

${http.request.ip} in ['1.1.1.1','10.10.10.0/24'] or ${http.request.ip.asn} in ['132203']

3. 匹配特定请求头值

匹配 Referer 请求头值为 one.example.com 的请求。

${http.request.headers['referer']} in ['one.example.com']

4. 检查长度

请求正文长度小于 30。

length(${http.request.body}) < 30

5. 通配符路径匹配

匹配以 /a/wildcard/path/ 或 /another/wildcard/path/ 开头的请求路径。

${http.request.uri.path} like ['/a/wildcard/path/*','/another/wildcard/path/*']

6. 字符串包含检查

匹配请求路径中包含子串 api 或 test 的请求。

${http.request.uri.path} contain ['api','test']

7. 复合存在性与取值检查

匹配 Accepts 请求头不存在,且 CustomHeader 请求头值为空字符串的请求。

not ${http.request.headers['Accepts']} exists and ${http.request.headers['CustomHeader']} in ['']

赞 (0)
上一篇 4天前
下一篇 4天前