From 91d3b7246a53247feaa19350f8ec330423c6d909 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it <75116288+FreddleSpl0it@users.noreply.github.com> Date: Tue, 18 Aug 2026 09:08:17 +0200 Subject: [PATCH] [Web] Minor hardening across web UI and nginx --- data/conf/nginx/templates/sites-default.conf.j2 | 1 + data/web/inc/ajax/dns_diagnostics.php | 12 ++++++------ data/web/inc/functions.inc.php | 2 +- data/web/js/site/dashboard.js | 2 ++ data/web/oauth/authorize.php | 6 ++++++ 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/data/conf/nginx/templates/sites-default.conf.j2 b/data/conf/nginx/templates/sites-default.conf.j2 index 688f2baa6..842c50a54 100644 --- a/data/conf/nginx/templates/sites-default.conf.j2 +++ b/data/conf/nginx/templates/sites-default.conf.j2 @@ -116,6 +116,7 @@ location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param HTTP_X_REAL_IP $remote_addr; # trusted internal-auth marker; empty for external clients (see nginx.conf map) fastcgi_param SOGO_AUTH_INTERNAL $sogo_auth_internal; fastcgi_read_timeout 3600; diff --git a/data/web/inc/ajax/dns_diagnostics.php b/data/web/inc/ajax/dns_diagnostics.php index 95e34e886..7ed92db77 100644 --- a/data/web/inc/ajax/dns_diagnostics.php +++ b/data/web/inc/ajax/dns_diagnostics.php @@ -380,13 +380,13 @@ if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "adm else { $state = state_nomatch; } - $state .= '
' . $current[$data_field[$current['type']]]; + $state .= '
' . htmlspecialchars($current[$data_field[$current['type']]]); } if ($current['type'] == 'TXT' && stripos($current['txt'], 'v=dmarc') === 0 && $record[2] == $dmarc_link) { $current['txt'] = str_replace(' ', '', $current['txt']); - $state = $current[$data_field[$current['type']]] . state_optional; + $state = htmlspecialchars($current[$data_field[$current['type']]]) . state_optional; } elseif ($current['type'] == 'TXT' && stripos($current['txt'], 'v=spf') === 0 && @@ -396,7 +396,7 @@ if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "adm if (in_array($ip, $rslt) && in_array(expand_ipv6($ip6), $rslt)) { $state = state_good; } - $state .= '
' . $current[$data_field[$current['type']]] . state_optional; + $state .= '
' . htmlspecialchars($current[$data_field[$current['type']]]) . state_optional; } elseif ($current['type'] == 'TXT' && stripos($current['txt'], 'v=dkim') === 0 && @@ -426,7 +426,7 @@ if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "adm if ($state == state_nomatch) { $state = array(); foreach ($currents as $current) { - $state[] = $current[$data_field[$current['type']]]; + $state[] = htmlspecialchars($current[$data_field[$current['type']]]); } $state = implode('
', $state); } @@ -436,7 +436,7 @@ if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "adm %s %s %s - ', $record[0], $record[1], $record[2], $state); + ', htmlspecialchars($record[0]), htmlspecialchars($record[1]), $record[2], $state); $record[3] = explode('
', $state); } @@ -477,7 +477,7 @@ if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "adm } ?> - .txt' type='text/csv'>Download + .txt' type='text/csv'>Download