新在Symfoob娱乐下载ny 5.1:服务器端请求伪造保护
2020年5月7日,·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。ob娱乐下载其中一些信息可能是过时了。阅读最近的Symfony文档ob娱乐下载。
安全漏洞等CSRF(跨站点请求伪造)是众所周知的大多数web开发人员和Symfony提供了自动保护。ob娱乐下载一个相关但不太知名的漏洞SSRF(服务器端请求伪造)。
SSRF允许攻击者诱导后端应用程序发出的HTTP请求到任意域。这些攻击目标的内部主机和IPs也可以攻击服务器。以下已提取的简化示例这篇文章,详细解释了这个问题:
步骤1你的后台管理只有从内部IPs(如自由访问。https://192.168.0.68/admin
)。
步骤2:您的web应用程序API请求如下获得某些信息(如产品的股票):
1 2 3 4 5
POST /产品/股票HTTP / 1.0 - type:应用程序/ x-www-form-urlencoded内容长度:118 stockApi = https://stock.weliketoshop.net: 8080 /产品/股票/检查% 3 fproductid % 3 d6 % 26 storeid % 3 d1
步骤3:攻击者可以提交下列请求访问你的后台管理:
1 2 3 4 5
POST /产品/股票HTTP / 1.0 - type:应用程序/ x-www-form-urlencoded内容长度:118 stockApi = https://192.168.0.68/admin
解决方案,因为它发生在许多安全漏洞,需要过滤用户输入(在这种情况下,用户所请求的IP地址)。在Syob娱乐下载mfony 5.1中,我们改进了HttpClient组件添加一个新NoPrivateNetworkHttpClient
默认情况下,所有内部IP地址。
这个新客户装修默认HttpClient,所以你可以使用它,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\HttpClient\HttpClient;使用ob娱乐下载\组件\HttpClient\NoPrivateNetworkHttpClient;美元客户端=新NoPrivateNetworkHttpClient (HttpClient::create ());/ /请求公共网络时没有什么变化美元客户端- >请求(“得到”,“https://example.com/”);/ /然而,所有请求私人网络现在被违约美元客户端- >请求(“得到”,“http://localhost/”);/ /第二个可选参数定义了网络阻塞/ /在这个例子中,请求从104.26.14.0 104.26.15.255将导致异常/ /但是所有其他请求,包括其他内部网络,将被允许美元客户端=新NoPrivateNetworkHttpClient (HttpClient::create (), (“104.26.14.0/23”]);
发表在#生活在边缘
评论
尼古拉斯Grekas
说5月7日,2020年吸
@naitsirch有点更复杂,例如考虑重定向:初始URL可以好,但是它可以重定向到一些内部IP。也思考一个爬虫,链接中找到一些HTML页面/超媒体API。
输入验证也不与说谎DNS服务器:想象一下,如果验证决定它是安全的,因为DNS回复non-internal IP,但当HTTP客户机的DSN和内部IP解析DNS回复吗?这样的DNS服务器存在到野外。NoPrivateNetworkHttpClient也防止这个。
输入验证也不与说谎DNS服务器:想象一下,如果验证决定它是安全的,因为DNS回复non-internal IP,但当HTTP客户机的DSN和内部IP解析DNS回复吗?这样的DNS服务器存在到野外。NoPrivateNetworkHttpClient也防止这个。
殴打fr1st naitsirch邮报:-)我必须首先阅读完全相关帖子了解具体是什么攻击场景我们防御。
我完全同意:如果你的API允许用户指定主机名对你的网络服务器的http调用,你f * * d真正的坏,应该首先学习一些关于安全,然后回顾整个应用程序其他明显,明显的错误并修复它们。
事实上,我怀疑使用NoPrivateNetworkHttpClient将为新的开发人员提供一种虚假的安全感,从而使情况变得更糟:- (
我谈论什么呢?简单:如果终端用户可以决定什么是目标主机名,然后黑名单private-network-ips是不够的,因为它意味着服务器仍然是一个开放式电驿,允许任何人使用它来发出请求到互联网,使源IP地址。有助于掩盖你的跟踪设置DOS攻击……
至少,白名单方式应该作为首选的黑名单的方法。
我完全同意:如果你的API允许用户指定主机名对你的网络服务器的http调用,你f * * d真正的坏,应该首先学习一些关于安全,然后回顾整个应用程序其他明显,明显的错误并修复它们。
事实上,我怀疑使用NoPrivateNetworkHttpClient将为新的开发人员提供一种虚假的安全感,从而使情况变得更糟:- (
我谈论什么呢?简单:如果终端用户可以决定什么是目标主机名,然后黑名单private-network-ips是不够的,因为它意味着服务器仍然是一个开放式电驿,允许任何人使用它来发出请求到互联网,使源IP地址。有助于掩盖你的跟踪设置DOS攻击……
至少,白名单方式应该作为首选的黑名单的方法。
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
naitsirch is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now应用程序已经碎在这一点上,不是吗?你不应该让用户输入URL用于交流。即使你做的,你应该验证它。
这等于mysql_query (“SELECT * FROM表id = {$ _POST [' id ']}”);
:- p