You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ModSecurity 2.9能否修改响应体实现内容审查?

ModSecurity实现响应内容审查(JSON字段过滤)

ModSecurity完全可以实现响应内容的审查与修改,包括你需要的JSON数组元素过滤场景。你的现有方案无法生效,核心问题是阶段选择错误、响应体修改方式不对,以下是修正后的完整实现步骤:

1. 基础配置检查

首先确保ModSecurity启用了响应体处理功能,在主配置文件中添加/确认以下配置:

SecResponseBodyAccess On
SecResponseBodyMimeType application/json  # 仅处理JSON类型响应,提升效率

2. 修正ModSecurity规则

将你的规则修改为phase:5(响应体处理阶段,此时完整响应体已加载完成),并调整动作参数:

SecRule RESPONSE_BODY "@rx .*" "id:100,phase:5,t:none,pass,exec:/usr/local/bin/change-response-body.lua"
  • phase:5:必须使用该阶段才能访问完整的响应体(phase:4仅处理响应头,无法获取完整响应内容)
  • pass:允许请求流程继续,仅执行脚本修改响应
  • t:none:关闭默认的字符转换,避免干扰JSON解析

3. 编写Lua过滤脚本

你之前的脚本错误使用setvar修改响应体,ModSecurity Lua API需用m.setbody()方法实现。同时需要引入JSON库解析、生成JSON内容(以社区常用的dkjson为例):

3.1 准备JSON解析库

将dkjson源码保存为dkjson.lua,放在Lua系统搜索路径(如/usr/local/share/lua/5.1/)或与脚本同一目录下。

3.2 编写过滤逻辑脚本

#!/usr/bin/lua
local dkjson = require("dkjson")

function main()
    -- 获取原始响应体
    local resp_body = m.getvar("RESPONSE_BODY")
    if not resp_body then return 1 end

    -- 解析JSON内容
    local json_data, parse_err = dkjson.decode(resp_body)
    if parse_err then
        m.log(3, "JSON解析失败: " .. parse_err)
        return 1
    end

    -- 过滤result数组中的"spider"项
    if type(json_data.result) == "table" then
        local filtered_result = {}
        for _, item in ipairs(json_data.result) do
            if item.name ~= "spider" then
                table.insert(filtered_result, item)
            end
        end
        json_data.result = filtered_result
    end

    -- 重新编码为格式化JSON
    local new_body, encode_err = dkjson.encode(json_data, {indent = true})
    if encode_err then
        m.log(3, "JSON编码失败: " .. encode_err)
        return 1
    end

    -- 设置修改后的响应体
    m.setbody(new_body)
    return 1
end

3.3 给脚本添加执行权限

chmod +x /usr/local/bin/change-response-body.lua

4. 调试与验证

如果仍有问题,开启ModSecurity调试日志排查细节:

SecDebugLog /var/log/modsec/debug.log
SecDebugLogLevel 9

通过日志可以确认脚本是否执行、JSON解析/编码是否出现错误。

内容的提问来源于stack exchange,提问作者Spin Egel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:46:21