URLConnection服务端请求伪造(SSRF)与文件泄露漏洞修复方案
使用URLConnection场景下SSRF与文件泄露漏洞的修复方案
当Web服务器未对用户传入的目标地址参数做合法性校验,就直接向该地址发起请求时,会产生**服务端请求伪造(SSRF)**漏洞。攻击者可利用该漏洞访问内网服务,或借助受影响的Web服务器作为跳板发起进一步攻击。
Java原生URLConnection默认支持file://等多种协议,攻击者可构造恶意参数利用这一特性访问服务器本地文件系统,甚至探测、访问其他内部服务,引发文件泄露、内网未授权访问等安全风险。
修复这类漏洞需要做两层强制校验,缺一不可:
- 协议白名单校验:仅放行业务实际需要的HTTP/HTTPS协议,直接拦截所有非预期协议,从根源阻断
file://等协议带来的本地文件读取风险 - 目标IP合法性校验:解析目标域名对应的实际IP地址,拦截所有指向本地回环、链路本地、本地绑定的内网地址,避免攻击者通过域名解析绕过限制访问内网资源
可参考如下安全实现代码:
HttpURLConnection conn = null; URL url = new URL(pagina); // 校验协议,仅允许http/https开头的协议 if (!url.getProtocol().startsWith("http")) { throw new Exception("非法请求协议"); } InetAddress inetAddress = InetAddress.getByName(url.getHost()); // 校验目标IP,禁止访问本地/内网地址 if (inetAddress.isAnyLocalAddress() || inetAddress.isLoopbackAddress() || inetAddress.isLinkLocalAddress()) { throw new Exception("非法目标地址"); } conn = (HttpURLConnection) url.openConnection(); return conn;
内容的提问来源于stack exchange,提问作者porfirio zacarias
相关产品推荐
相关产品推荐

