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

为何客户端fetch触发CWE-918 SSRF告警?Semgrep扫描问题求助

解决Semgrep SAST触发的客户端SSRF(CWE-918)误报问题

首先明确:SSRF(服务端请求伪造)是服务端漏洞,核心是攻击者通过服务端发起未授权请求。你这段是客户端代码,运行在用户浏览器里,本身不存在SSRF风险——浏览器的同源策略会限制跨域请求,就算有攻击者想利用,也没法通过客户端请求攻击内部服务,所以这大概率是Semgrep的误报。

试试这几个解决办法:

  • 直接给代码加Semgrep忽略注释
    在fetch代码块上方加注释,告诉扫描器跳过这条规则检测:

    // nosemgrep: js.lang.security.audit.ssrf.ssrf
    const resp = await fetch(url, {
      method: "POST",
      headers: {
        Accept:
          "application/graphql-response+json; charset=utf-8, application/json; charset=utf-8",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        query: request.text,
        variables,
      }),
    });
    
  • 彻底固化URL并加校验
    把URL改成完全硬编码的后端地址,再加上域名校验逻辑,从根源上消除规则匹配的可能:

    // 硬编码合法的API域名
    const ALLOWED_API_DOMAIN = "your-backend-domain.com";
    const API_URL = `https://${ALLOWED_API_DOMAIN}/graphql`;
    
    // 额外的域名校验(可选,进一步加固)
    const targetUrl = new URL(API_URL);
    if (targetUrl.hostname !== ALLOWED_API_DOMAIN) {
      throw new Error("Invalid API endpoint");
    }
    
    const resp = await fetch(targetUrl.toString(), {
      method: "POST",
      headers: {
        Accept:
          "application/graphql-response+json; charset=utf-8, application/json; charset=utf-8",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        query: request.text,
        variables,
      }),
    });
    
  • 调整Semgrep全局配置
    如果项目里客户端代码都不需要扫SSRF规则,可以在.semgrep.yml里加排除规则,避免误报:

    rules:
      - id: skip-client-ssrf-checks
        paths:
          exclude:
            - "src/client/**/*.js"
            - "src/**/*.jsx" # 适配React组件文件路径
        rule: js.lang.security.audit.ssrf.ssrf
        mode: skip
    

之前你用硬编码URL、URL接口构造没解决,是因为Semgrep的SSRF规则可能只是简单匹配fetch调用的模式,没区分客户端还是服务端代码,所以得通过注释、配置排除或者更明确的固化逻辑来让扫描器识别这是安全的。

内容的提问来源于stack exchange,提问作者T. Junghans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:40:12