背景
当你提供的Web服务中,用户可以手动指定某个URL并需要由你的后端服务代为发起访问获取内容时,此时你将面临恶意的SSRF攻击。本文针对SSRF攻击,提供了一个物理隔绝SSRF攻击的思路。
Squid是一款流行的开源、高性能的代理缓存服务器软件,它主要用于提高网络性能和减少带宽使用。基于Squid,我们可以在一个独立的网络环境中搭建一个代理集群,并将所有的用户指定URL的访问请求转发到Squid集群来获取,从而避免针对恶意用户针对自身服务的SSRF攻击。
解决方案
已有解决方案
- 禁止非http协议(或者发起访问的协议由自身指定),如file、gopher、ftp协议需要禁止;
- HOST白名单校验;这个方案很难,特别是针对企业软件开发场景,用户指定的URL HOST基本上无法限制;
物理防御方案
通过Squid搭建代理集群,然后通过在业务代码手动指定HTTP Proxy方式实现。以阿里云的部署环境为例,我们可以采用Private Link + NLB + Squid集群来实现物理上的SSRF攻击防御。
技术原理参考
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/CONNECT
参考文档
- Http Connect介绍:
- https://www.cnblogs.com/yjf512/p/17048487.html
- https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/CONNECT
- https://www.rfc-editor.org/rfc/rfc9110#CONNECT
- Squid官网:http://www.squid-cache.org/
- SSRF攻击: