From 272c8f9cebe0606b5b0fb6e1b547a2ab95eeedd0 Mon Sep 17 00:00:00 2001 From: merelendor Date: Sat, 30 Nov 2024 07:57:37 +0000 Subject: [PATCH] security audit fixes: task ID 12, 14, 15: remote X-Forwarded-For headers key lookup, move IP lookup / auth key lookup to web-server generated keys --- api/index.php | 8 ++++---- readme.md | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/api/index.php b/api/index.php index 1451af9..459b58c 100644 --- a/api/index.php +++ b/api/index.php @@ -89,7 +89,7 @@ function checkRequestIsLocal() return true; } - if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], SELF_IP) > -1) + if($_SERVER[API_SELF_IP_LOOKUP_KEY] === SELF_IP) { return true; } @@ -342,9 +342,9 @@ function setCompanyForUser($ID, $REQ, $replace = false) } } -if($_SERVER['REMOTE_USER'] && strpos($_SERVER['REMOTE_USER'], "Bearer") > -1) +if($_SERVER[API_AUTH_LOOKUP_KEY] && strpos($_SERVER[API_AUTH_LOOKUP_KEY], "Bearer") > -1) { - $token = str_replace("Bearer ", "", $_SERVER['REMOTE_USER']); + $token = str_replace("Bearer ", "", $_SERVER[API_AUTH_LOOKUP_KEY]); try { @@ -2764,7 +2764,7 @@ switch($PARAM_1) { if(checkRequestIsLocal()) { - $token = str_replace("Bearer ", "", $_SERVER['REMOTE_USER']); + $token = str_replace("Bearer ", "", $_SERVER[API_AUTH_LOOKUP_KEY]); $auth = (array) \Bitrix\Main\Web\JWT::decode($token, $secret, ["HS256"]); $user = new \CUser; diff --git a/readme.md b/readme.md index e17506a..138ae2c 100644 --- a/readme.md +++ b/readme.md @@ -6,4 +6,10 @@ SELF_IP - публичный IPv4 адрес сервера MODE_PRODUCTION - включен ли production режим DEBUG_IBLOCK_CYCLE - позволять ли сохранять дамп структуры элемента инфоблока при Add/Update операциях на подверженных рекламе инфоблоках ADVERTISING_IBLOCK_ARRAY - Массив идентификаторов инфоблоков, формата КОНСТАНТА => строковое значение из проекта evolution-advertiser +``` +## Константы, зависящие от метода размещения - за CDN/без, используется ли контейнеризация +### авторизация в методах API осуществляется посредством передачи JWT токена +``` +API_SELF_IP_LOOKUP_KEY - ключ в заголовках http запроса/передаваемых параметрах веб-сервера, валидные значения: REMOTE_ADDR; при использовании CDN: HTTP_CF_CONNECTING_IP или иной ключ, не подверженный подмене первичным отправителем запроса +API_AUTH_LOOKUP_KEY - ключ в заголовках http запроса/передаваемых параметрах веб-сервера, валидные значения: HTTP_AUTHORIZATION, REMOTE_USER ``` \ No newline at end of file