Puppeteer是否存在SSRF风险?如何防范该漏洞?
Puppeteer SSRF 安全问题的防范措施
确实如你所说,Puppeteer存在SSRF风险,攻击者可通过构造恶意URL,诱导Puppeteer访问内部网络资源或敏感服务。以下是具体的落地防范措施:
严格限制访问范围
启用请求拦截功能,对每个请求的目标地址做多层校验:- 直接拒绝访问私有IP网段(如127.0.0.1、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)
- 仅允许访问预先定义的可信域名白名单
- 解析URL时注意处理
http://trusted.com@malicious.com这类绕过技巧,提取真实的目标主机名
示例代码:
const puppeteer = require('puppeteer'); const privateIPRegexes = [/^127\./, /^10\./, /^172\.(1[6-9]|2[0-9]|3[0-1])\./, /^192\.168\./]; (async () => { const browser = await puppeteer.launch(); // 非必要请勿添加--no-sandbox参数 const page = await browser.newPage(); await page.setRequestInterception(true); page.on('request', req => { const url = new URL(req.url()); const allowedDomains = ['your-trusted-domain.com']; // 校验协议合法性 if (!['http:', 'https:'].includes(url.protocol)) { req.abort(); return; } // 拦截私有IP访问 if (privateIPRegexes.some(re => re.test(url.hostname))) { req.abort(); return; } // 校验域名白名单 if (!allowedDomains.includes(url.hostname)) { req.abort(); return; } req.continue(); }); await page.goto('user-provided-url'); await browser.close(); })();禁用危险协议
拦截并拒绝除http、https之外的所有协议请求(如file://、ftp://、gopher://等),这类协议常被用来访问本地文件或触发恶意操作。跟踪校验跳转请求
Puppeteer默认会跟随页面跳转,攻击者可能通过跳转绕过初始URL校验。需在跳转触发时重新检查目标地址,确保跳转后的地址也符合安全规则。禁用不必要的高风险功能
- 避免使用
--no-sandbox、--disable-setuid-sandbox等弱化沙箱的启动参数,沙箱是隔离恶意页面操作的核心防线 - 通过
--disable-features=NetworkService、--disable-extensions等参数禁用非必要浏览器特性,缩小攻击面
- 避免使用
严格预处理输入URL
对用户提供的URL做标准化处理:- 解析并格式化URL,去除多余特殊字符
- 直接拒绝包含
javascript:伪协议、短链接跳转等特殊逻辑的URL
定期更新Puppeteer版本
Puppeteer团队会持续修复已知安全漏洞,及时更新到最新稳定版能有效降低被利用的风险。
内容的提问来源于stack exchange,提问作者dbain
相关产品推荐
相关产品推荐

