📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

script.painless.regex.enabled 配置项控制是否在 Painless 脚本中启用正则表达式及其复杂度限制。

是否可选 #

默认值 #

"limited" (启用但限制复杂度)

配置项类型 #

静态配置 - 需要重启节点才能生效

配置格式 #

# 默认配置(推荐)
script.painless.regex.enabled: "limited"

# 完全启用(无限制)
script.painless.regex.enabled: "true"

# 完全禁用
script.painless.regex.enabled: "false"

选项说明 #

选项说明复杂度限制安全性
"limited"启用但限制复杂度regex.limit-factor 限制
"true"完全启用无限制
"false"完全禁用不适用最高

工作原理 #

┌─────────────────────────────────────────────────────────┐
│                   正则表达式处理                          │
└─────────────────────────────────────────────────────────┘

Painless 脚本执行
    │
    ▼
检查 regex.enabled
    │
    ├── "false" → 禁用正则,抛出错误
    │
    ├── "true" → 允许任意复杂度正则
    │
    └── "limited" → 检查复杂度
            │
            ├── 复杂度 <= limit → 执行
            └── 复杂度 > limit → 拒绝

复杂度计算 #

当设置为 "limited" 时:

  • 复杂度 = 输入字符串长度 × limit-factor
  • 默认 limit-factor 为 6
  • 可通过 script.painless.regex.limit-factor 调整

推荐设置 #

环境推荐值说明
默认配置“limited”平衡功能和安全性
生产环境“limited”防止正则 DoS
高安全环境“false”完全禁用正则
开发环境“true”便于测试

使用示例 #

默认配置(推荐):

script.painless.regex.enabled: "limited"
script.painless.regex.limit-factor: 6

生产环境安全配置:

script.painless.regex.enabled: "limited"
script.painless.regex.limit-factor: 3

高安全环境:

script.painless.regex.enabled: "false"

开发测试环境:

script.painless.regex.enabled: "true"

安全考虑 #

正则表达式 DoS 风险:

复杂正则可能导致 ReDoS (Regular Expression Denial of Service):

  • 指数级时间复杂度
  • 耗尽 CPU 资源
  • 导致服务无响应

风险示例:

// 危险:回溯灾难
/a+a+a+a+a+a+/.matcher("aaaaaaaaaaaaaaaaaaaaa")

// 安全:限制复杂度

配置验证 #

# 查看当前配置
GET /_nodes/settings?filter_path=nodes.*.script.painless.regex*

# 测试正则表达式
GET /_search
{
  "query": {
    "script": {
      "source": "doc['text'].value =~ /pattern/"
    }
  }
}

常见问题 #

问题 1:正则被拒绝

错误信息:

script_exception: regular expression is too complex

解决方案:

# 增加 limit-factor
script.painless.regex.limit-factor: 10

# 或启用无限制模式(不推荐)
script.painless.regex.enabled: "true"

问题 2:正则功能不可用

错误信息:

script_exception: regular expressions are disabled

解决方案:

script.painless.regex.enabled: "limited"

注意事项 #

  1. 静态配置:修改需要重启节点
  2. DoS 保护:limited 模式提供保护
  3. 性能影响:复杂正则影响性能
  4. 生产环境:推荐使用 limited 模式
  5. 无限制风险:true 模式存在安全风险

相关配置项 #

配置项默认值说明
script.painless.regex.limit-factor6复杂度限制因子
script.max_compilations_rateuse-context编译速率限制

完整配置示例 #

# easysearch.yml

# 推荐配置
script.painless.regex.enabled: "limited"
script.painless.regex.limit-factor: 6

# 安全配置
script.painless.regex.enabled: "limited"
script.painless.regex.limit-factor: 3