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

Owasp ZAP的request hooks使用:特定请求触发自定义动作的实现方法

OWASP ZAP自定义请求钩子实现方案

完全可以实现该需求,ZAP没有直接命名为request hooks的配置项,但可以通过内置的HTTP监听器脚本能力,完成特定请求触发自定义动作的逻辑,docker环境也支持无需二次打包镜像的配置方式。

核心实现逻辑

ZAP的HTTP监听器脚本支持两个触发节点:请求发送前、响应返回后,你可以选择请求发送完成后的触发节点,匹配登录/登出请求规则后,调用ZAP内置的HTTP客户端向指定端点发送POST请求即可。

具体操作步骤

  • 第一步:编写自定义监听器脚本
    支持JavaScript、Python等多种脚本语言,以下是JavaScript示例,可直接修改使用:
    // 脚本类型选择「HTTP监听器」,触发时机选择请求发送后
    function sendingRequest(msg, initiator, helper) {
      // 无需处理请求发送前逻辑,此处留空即可
    }
    
    function responseReceived(msg, initiator, helper) {
      // 获取当前请求的完整URL
      const reqUrl = msg.getRequestHeader().getURI().toString();
      // 替换为你实际的登录/登出接口匹配规则
      if (reqUrl.includes("/api/user/login") || reqUrl.includes("/api/user/logout")) {
        // 构造POST请求参数
        const targetEndpoint = "http://你的指定端点地址";
        const postBody = JSON.stringify({
          event: reqUrl.includes("login") ? "login_request" : "logout_request",
          request_id: msg.getRequestHeader().getHeader("X-Request-ID") || "",
          timestamp: Date.now()
        });
        // 调用ZAP内置HTTP客户端发送请求
        const httpSender = org.parosproxy.paros.network.HttpSender.newInstance(
          org.parosproxy.paros.control.Control.getSingleton()
            .getExtensionLoader()
            .getExtension("ExtensionNetwork")
            .getHttpSenderConfig()
        );
        const requestHeader = new org.parosproxy.paros.network.HttpRequestHeader(
          "POST", new java.net.URI(targetEndpoint), "HTTP/1.1"
        );
        requestHeader.setHeader("Content-Type", "application/json");
        // 可自行添加鉴权头,比如Authorization等
        const httpMessage = new org.parosproxy.paros.network.HttpMessage(
          requestHeader, postBody.getBytes()
        );
        httpSender.sendAndReceive(httpMessage, true);
      }
    }
    
  • 第二步:Docker环境挂载脚本启动
    不需要修改ZAP镜像,直接将本地编写的脚本挂载到容器的自动加载目录即可:
    1. 把上面的脚本保存为本地文件auth-monitor.js
    2. 启动容器时添加挂载参数,同时指定脚本加载配置:
    docker run -t \
      -v $(pwd)/auth-monitor.js:/home/zap/.ZAP_D/scripts/scripts/http/auth-monitor.js \
      owasp/zap2docker-stable \
      zap.sh -daemon \
      -script /home/zap/.ZAP_D/scripts/scripts/http/auth-monitor.js \
      -scriptparams "type=httplistener,enabled=true"
    
    如果你有多个自定义脚本,也可以把所有脚本放到本地的zap-scripts目录,统一挂载到/home/zap/.ZAP_D/scripts/scripts/路径下,ZAP启动时会自动扫描加载所有合法脚本。

注意事项

  • 如果你指定的POST端点是宿主机本地服务,需要注意docker容器的网络配置,保证容器内可以正常访问到端点地址
  • 匹配登录/登出请求的规则尽量精准,可同时添加请求方法、请求参数等匹配条件,避免误触发
  • 发送POST请求如果需要加签名、鉴权等逻辑,直接在脚本里构造请求头和请求体时自行添加即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:06:04