From a5bcaa7b4a22ba8f564b467d610e92c3b19e09fe Mon Sep 17 00:00:00 2001 From: Matthieu Marcillaud <marcimat@rezo.net> Date: Wed, 8 Feb 2017 16:33:08 +0000 Subject: [PATCH] =?UTF-8?q?Correction=20diff=C3=A9rente=20pour=20#3386=20(?= =?UTF-8?q?Cerdic)=20afin=20de=20regrouper=20les=20choses=20autour=20de=20?= =?UTF-8?q?HTTP=5FX=5FFORWARDED=20au=20m=C3=AAme=20endroit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/inc/utils.php | 18 +----------------- ecrire/inc_version.php | 8 ++++++++ 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index faa42dc2bd..2f22f27220 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -1736,16 +1736,6 @@ function test_valeur_serveur($truc) { * racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et à * la racine 0. Sur url/perso/ elle vaut 2 * - * @note - * Le test indiquant une connexion 'https' repose sur plusieurs éléments en fonction - * des serveurs / reverse proxy. Dans certains cas il faut compléter en indiquant à SPIP - * que le port 80 d'arrivée est aussi utilisé pour https, sinon il ajoutera :80 aux urls calculées. - * - * ``` - * // Nginx:443 => Apache:80 => SPIP… - * define('_PORT_HTTPS_STANDARD', '443,80'); - * ``` - * * @param int|boo|array $profondeur * - si non renseignée : retourne l'url pour la profondeur $GLOBALS['profondeur_url'] * - si int : indique que l'on veut l'url pour la profondeur indiquée @@ -1772,7 +1762,7 @@ function url_de_base($profondeur = null) { } $http = 'http'; - // plusieurs configurations serveurs peuvent indiquer une connexion https + if ( isset($_SERVER["SCRIPT_URI"]) and substr($_SERVER["SCRIPT_URI"], 0, 5) == 'https' @@ -1783,12 +1773,6 @@ function url_de_base($profondeur = null) { and test_valeur_serveur($_SERVER['HTTPS']) ) { $http = 'https'; - } elseif ( - isset($_SERVER['HTTP_X_FORWARDED_PROTO']) - AND $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' - AND strncmp($GLOBALS['meta']['adresse_site'], 'https', 5) == 0) - { - $http = 'https'; } // note : HTTP_HOST contient le :port si necessaire diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php index 88fda3bed4..0a7eae0f50 100644 --- a/ecrire/inc_version.php +++ b/ecrire/inc_version.php @@ -209,6 +209,14 @@ $debut_date_publication = null; // // Prendre en compte les entetes HTTP_X_FORWARDED_XX // +if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO']==='https'){ + if (empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { + $_SERVER['HTTP_X_FORWARDED_HOST'] = $_SERVER['HTTP_HOST']; + } + if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) { + $_SERVER['HTTP_X_FORWARDED_PORT'] = 443; + } +} if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])){ if (isset($_SERVER['HTTP_X_FORWARDED_PORT']) and is_numeric($_SERVER['HTTP_X_FORWARDED_PORT'])){ $_SERVER['SERVER_PORT'] = $_SERVER['HTTP_X_FORWARDED_PORT']; -- GitLab