From 2b4591c49f70ee544099e2cec3b99dff108d8770 Mon Sep 17 00:00:00 2001 From: Jukka Lampikoski Date: Wed, 11 Mar 2026 08:53:32 +0200 Subject: [PATCH] =?UTF-8?q?Korjaa=20getClientIp()=20X-Forwarded-For=20pars?= =?UTF-8?q?inta=20+=20n=C3=A4yt=C3=A4=20IP=20virheess=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Forwarded-For voi sisältää useita IP:tä pilkulla erotettuna. Otetaan nyt vain ensimmäinen (asiakkaan oikea IP). Lisäksi näytetään havaittu IP virheviestissä debuggausta varten. Co-Authored-By: Claude Opus 4.6 --- api.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/api.php b/api.php index d3eebda..f5b861c 100644 --- a/api.php +++ b/api.php @@ -127,7 +127,14 @@ function companyFile(string $filename): string { } function getClientIp(): string { - return $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0'; + $xff = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? ''; + if ($xff) { + // X-Forwarded-For voi sisältää useita IP:itä: "client, proxy1, proxy2" — otetaan ensimmäinen + $parts = explode(',', $xff); + $ip = trim($parts[0]); + if (filter_var($ip, FILTER_VALIDATE_IP)) return $ip; + } + return $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0'; } /** @@ -1163,7 +1170,7 @@ switch ($action) { if (empty($allowedCompanies)) { dbRecordLoginAttempt($ip); http_response_code(403); - echo json_encode(['error' => 'IP-osoitteesi ei ole sallittu.']); + echo json_encode(['error' => 'IP-osoitteesi (' . $ip . ') ei ole sallittu.']); break; } $userCompanies = $allowedCompanies;