public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
[Web] Add validation for server_name against allow list
a2e87e08
data/web/inc/functions.inc.php | 22 +++++++++++++++++++---
docker-compose.yml | 1 +
2 files changed, 20 insertions(+), 3 deletions(-)
Diff
diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php
index 73769d90..0a9b94fc 100644
--- a/data/web/inc/functions.inc.php
+++ b/data/web/inc/functions.inc.php
@@ -2275,9 +2275,25 @@ function cors($action, $data = null) {
break;
}
}
-function getBaseURL() {
- $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
- $host = $_SERVER['SERVER_NAME'];
+function getBaseURL($protocol = null) {
+ // Get current server name
+ $host = strtolower($_SERVER['SERVER_NAME']);
+
+ // craft allowed server name list
+ $mailcow_hostname = strtolower(getenv("MAILCOW_HOSTNAME"));
+ $additional_server_names = strtolower(getenv("ADDITIONAL_SERVER_NAMES")) ?: "";
+ $additional_server_names = preg_replace('/\s+/', '', $additional_server_names);
+ $allowed_server_names = $additional_server_names !== "" ? explode(',', $additional_server_names) : array();
+ array_push($allowed_server_names, $mailcow_hostname);
+
+ // Fallback to MAILCOW HOSTNAME if current server name is not in allowed list
+ if (!in_array($host, $allowed_server_names)) {
+ $host = $mailcow_hostname;
+ }
+
+ if (!isset($protocol)) {
+ $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
+ }
$base_url = $protocol . '://' . $host;
return $base_url;
diff --git a/docker-compose.yml b/docker-compose.yml
index 2b5e85cb..c5fae01a 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -174,6 +174,7 @@ services:
- DEMO_MODE=${DEMO_MODE:-n}
- WEBAUTHN_ONLY_TRUSTED_VENDORS=${WEBAUTHN_ONLY_TRUSTED_VENDORS:-n}
- CLUSTERMODE=${CLUSTERMODE:-}
+ - ADDITIONAL_SERVER_NAMES=${ADDITIONAL_SERVER_NAMES:-}
restart: always
networks:
mailcow-network: