getServerParams(); $remoteAddr = trim((string) ($serverParams['REMOTE_ADDR'] ?? '')); if ($remoteAddr === '') { return '0.0.0.0'; } if (!$this->isTrustedProxy($remoteAddr)) { return $remoteAddr; } $forwarded = trim((string) ($serverParams['HTTP_X_FORWARDED_FOR'] ?? '')); if ($forwarded === '') { return $remoteAddr; } $candidate = trim(explode(',', $forwarded)[0]); return filter_var($candidate, FILTER_VALIDATE_IP) ? $candidate : $remoteAddr; } private function isTrustedProxy(string $remoteAddr): bool { foreach ($this->trustedProxies as $proxy) { if ($proxy === '*' || $proxy === $remoteAddr) { return true; } } return false; } }