From ffcadf25d4b4d4782d85541e329255ce8f6de759 Mon Sep 17 00:00:00 2001 From: Mikael Peigney Date: Mon, 5 Feb 2024 12:41:28 +0100 Subject: [PATCH] fix(request): Handle reverse proxy setting a port in Forwarded-For Signed-off-by: Mikael Peigney --- lib/private/AppFramework/Http/Request.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/private/AppFramework/Http/Request.php b/lib/private/AppFramework/Http/Request.php index 72ecffa773f..fc72a3f4525 100644 --- a/lib/private/AppFramework/Http/Request.php +++ b/lib/private/AppFramework/Http/Request.php @@ -607,10 +607,16 @@ class Request implements \ArrayAccess, \Countable, IRequest { if (isset($this->server[$header])) { foreach (array_reverse(explode(',', $this->server[$header])) as $IP) { $IP = trim($IP); - - // remove brackets from IPv6 addresses - if (str_starts_with($IP, '[') && str_ends_with($IP, ']')) { - $IP = substr($IP, 1, -1); + $colons = substr_count($IP, ':'); + if($colons > 1) { + // Extract IP from string with brackets and optional port + if(1 === preg_match('`^\[(.+?)\](?::\d+)?$`', $IP, $matches) && count($matches) === 1) { + $IP = $matches[0]; + } + } + elseif($colons === 1) { + // IPv4 with port + $IP = substr($IP, 0, strpos($IP, ':')); } if ($this->isTrustedProxy($trustedProxies, $IP)) {