【Java代码审计 | 第十二篇】SSRF漏洞之“跨协议”

未经许可,不得转载。

在这里插入图片描述

阅读本文时,请同时参阅:【Java代码审计 | 第十一篇】SSRF漏洞成因及防范

跨协议

“跨协议”指的是代码能够通过多种协议(如httphttpsftpfile等)访问资源。

例如:

  • http://example.com:通过HTTP协议访问网页。
  • file:///etc/passwd:通过文件协议访问本地文件。
  • ftp://example.com/file.txt:通过FTP协议下载文件。

在SSRF漏洞中,攻击者可以利用“跨协议”特性,诱使服务器访问本地文件、内网服务或其他非预期的资源。

HTTP请求

在Java中,发送HTTP请求的常见方式有以下几种。

InputStream inputStream = u.openStream();

功能:直接通过URL对象打开一个输入流,读取URL指向的资源内容。

特点:这是一种简单的发起请求的方式。支持跨协议,即可以通过httphttpsftpfile等协议访问资源。

风险:如果URL是用户输入的,攻击者可以利用它访问本地文件(如file:///etc/passwd)或内网服务,导致SSRF漏洞

URLConnection urlConnection = u.openConnection();

功能:通过URL对象创建一个URLConnection对象,用于更灵活地发起请求。

特点URLConnection是一个抽象类,支持多种协议(如httphttpsftpfile等)。可以通过urlConnection设置请求头、超时时间等。同样支持跨协议

风险:如果URL是用户输入的,攻击者可以利用它访问任意协议的资源,导致SSRF漏洞

HttpURLConnection httpURLConnection = (HttpURLConnection)urlConnection;

功能:将URLConnection对象强制转换为HttpURLConnection对象。

特点HttpURLConnectionURLConnection的子类,专门用于处理HTTP/HTTPS请求。转换后,只能使用httphttps协议,其他协议(如fileftp)会抛出异常。例如:
- http://example.com(允许)
- https://example.com(允许)
- file:///etc/passwd(不允许,会抛出异常)

优点:通过限制协议类型,可以有效减少SSRF攻击的风险。

InputStream inputStream = urlConnection.getInputStream();

功能:通过URLConnection对象获取输入流,读取响应内容。

特点:如果使用的是HttpURLConnection,则只能读取HTTP/HTTPS的响应内容。如果使用的是普通的URLConnection,则可以读取任意协议的资源内容。

防范

1、限制协议

使用HttpURLConnection,强制限制为HTTP/HTTPS协议。不使用URL.openStream()URLConnection,除非明确需要支持其他协议。

2、输入验证

对用户输入的URL进行严格的验证,确保其符合预期的格式和范围;使用白名单机制,只允许访问特定的域名或IP地址。

3、禁用危险协议

在代码中检查URL的协议,禁止使用fileftp等危险协议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值