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 installip的包自动使用ipaddr.js替代,注意测试第三方库的功能是否正常,避免兼容性问题。
验证步骤
- 用内网IP(如
192.168.1.1、10.0.0.1)测试校验逻辑,确认被识别为非公网IP; - 用合法公网IP测试,确认识别正常;
- 执行
ng build构建项目,确保无编译错误; - 运行项目核心功能,验证IP相关逻辑未受影响。
内容的提问来源于stack exchange,提问作者Ahmed Al-Hadab
相关产品推荐
相关产品推荐

