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

Angular仓库遇GitHub Dependabot告警:NPM ip包存在SSRF漏洞求助

修复Angular仓库中ip包isPublic()函数的SSRF漏洞

问题背景

你当前使用Angular 14.2.0 + Node 18.15.0,Dependabot告警的ip包漏洞确实存在——该包所有版本的isPublic()函数无法准确区分公网/内网IP,攻击者可利用这一点构造恶意请求触发SSRF,进而执行任意代码或窃取敏感信息。

解决方案

因为ip包所有已发布版本都存在该问题,无法通过升级修复,推荐以下两种方案:

1. 替换为安全的IP校验包(优先推荐)

用维护活跃、校验逻辑更严谨的ipaddr.js替代ip包:

  • 安装替代包:
    npm install ipaddr.js
    
  • 替换代码中的isPublic()调用:
    原代码(示例):
    const ip = require('ip');
    const isPublicIp = ip.isPublic(userProvidedIp);
    
    替换为:
    const ipaddr = require('ipaddr.js');
    function isPublicIp(ipAddress) {
      try {
        const parsedIp = ipaddr.parse(ipAddress);
        // 校验IP合法性 + 排除内网/保留IP段
        return !parsedIp.isPrivate() && !parsedIp.isReserved();
      } catch (err) {
        // 非法IP直接返回false
        return false;
      }
    }
    

2. 处理间接依赖的情况(如果ip是第三方库的依赖)

如果ip包不是你直接引入的,而是项目依赖的第三方库带的,可通过npm的overrides强制替换依赖逻辑:

  • 在package.json中添加overrides字段:
    "overrides": {
      "ip": "npm:ipaddr.js@^2.1.0"
    }
    
  • 重新安装依赖:
    npm install
    
    这个配置会让所有依赖ip的包自动使用ipaddr.js替代,注意测试第三方库的功能是否正常,避免兼容性问题。

验证步骤

  • 用内网IP(如192.168.1.1、10.0.0.1)测试校验逻辑,确认被识别为非公网IP;
  • 用合法公网IP测试,确认识别正常;
  • 执行ng build构建项目,确保无编译错误;
  • 运行项目核心功能,验证IP相关逻辑未受影响。

内容的提问来源于stack exchange,提问作者Ahmed Al-Hadab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:57:13