在 base64Decode 之后使用 requestBodyProcessor

Use requestBodyProcessor after base64Decode

ModSecurity 允许我们使用不同的请求主体处理器(例如 XML 或 JSON)。我的问题是,是否可以先解码包含 base64 编码字符串的主体

eyJuYW1lIjoiSm9obiIsICJhZ2UiOjI1fQ==

转换为

{"name":"John", "age":25}

然后使用 requestBodyProcessor=JSON?

我尝试了不同的转换规则等,但无法正常工作。

很遗憾,这是不可能的,因为:

  • body 处理器需要在第 1 阶段激活,这不能在以后的任何阶段完成
  • REQUEST_BODY 变量在第 2 阶段开始时填充,因此在第 1 阶段不可访问

有一种方法可以实现您的需要,但它有点复杂,并且与使用已解析 JSON 数据的现有规则不向后兼容。你可以这样做:

  • 禁用 JSON body 处理器
  • 创建在第 2 阶段开始时(在所有其他规则之前)运行并运行 Lua 脚本的新规则
  • 创建一个 Lua 脚本,它首先从 REQUEST_BODY 解码 base64 数据,然后在其上运行 JSON 解析器,最后通过 TX [=32= 中的某个变量公开解析的数据]