diff --git a/ecrire/inc/commencer_page.php b/ecrire/inc/commencer_page.php index 8ce47b3c1950235e2e95e3afdaa54679d2cdb145..cb4897f126f0f6d51228ad0fe598855321776ff4 100644 --- a/ecrire/inc/commencer_page.php +++ b/ecrire/inc/commencer_page.php @@ -157,16 +157,14 @@ function init_body($rubrique = 'accueil', $sous_rubrique = 'accueil', $id_rubriq * @return string Classes CSS (séparées par des espaces) */ function init_body_class() { - $GLOBALS['spip_display'] = isset($GLOBALS['visiteur_session']['prefs']['display']) - ? $GLOBALS['visiteur_session']['prefs']['display'] - : 2; - $spip_display_navigation = isset($GLOBALS['visiteur_session']['prefs']['display_navigation']) - ? $GLOBALS['visiteur_session']['prefs']['display_navigation'] - : 'navigation_avec_icones'; - $spip_display_outils = isset($GLOBALS['visiteur_session']['prefs']['display_outils']) - ? ($GLOBALS['visiteur_session']['prefs']['display_outils'] ? 'navigation_avec_outils' : 'navigation_sans_outils') + $prefs = isset($GLOBALS['visiteur_session']['prefs']) ? $GLOBALS['visiteur_session']['prefs'] : array(); + + $GLOBALS['spip_display'] = isset($prefs['display']) ? (int) $prefs['display'] : 2; + $spip_display_navigation = isset($prefs['display_navigation']) ? spip_sanitize_classname($prefs['display_navigation']) : 'navigation_avec_icones'; + $spip_display_outils = isset($prefs['display_outils']) + ? ($prefs['display_outils'] ? 'navigation_avec_outils' : 'navigation_sans_outils') : 'navigation_avec_outils'; - $GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? $_COOKIE['spip_ecran'] : "etroit"; + $GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? spip_sanitize_classname($_COOKIE['spip_ecran']) : "etroit"; $display_class = array( 0 => 'icones_img_texte' @@ -176,11 +174,10 @@ function init_body_class() { 3 => 'icones_img' ); - $couleur = isset($GLOBALS['visiteur_session']['prefs']['couleur']) - ? $GLOBALS['visiteur_session']['prefs']['couleur'] - : 9; + $couleur = isset($prefs['couleur']) ? (int) $prefs['couleur'] : 9; - return $GLOBALS['spip_ecran'] . " couleur_$couleur $spip_display_navigation $spip_display_outils " . $display_class[$GLOBALS['spip_display']]; + $classes = $GLOBALS['spip_ecran'] . " couleur_$couleur $spip_display_navigation $spip_display_outils " . $display_class[$GLOBALS['spip_display']]; + return spip_sanitize_classname($classes); } diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index ec6c845d4d2baa1ffbbc6242ddf703b6772478b7..a61217fb4b405708229833152418b4dc148bc21b 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -3588,3 +3588,20 @@ if (PHP_VERSION_ID < 50500) { } } + +/** + * Nettoie une chaine pour servir comme classes CSS. + * + * @note + * les classes CSS acceptent théoriquement tous les caractères sauf NUL. + * Ici, on limite (enlève) les caractères autres qu’alphanumérique, espace, - + _ @ + * + * @param string|string[] $classes + * @return string|string[] + */ +function spip_sanitize_classname($classes) { + if (is_array($classes)) { + return array_map('spip_sanitize_classname', $classes); + } + return preg_replace("/[^ 0-9a-z_\-+@]/i", "", $classes); +} \ No newline at end of file diff --git a/ecrire/index.php b/ecrire/index.php index ddc116c3058a379533b1e6c2b3bf4284f788a474..4295b5f450162534370f0870c1cfd8d928668c97 100644 --- a/ecrire/index.php +++ b/ecrire/index.php @@ -146,9 +146,9 @@ elseif (!preg_match(',^[a-z4_][0-9a-z_-]*$,i', $exec)) { // compatibilite ascendante : obsolete, ne plus utiliser $GLOBALS['spip_display'] = isset($GLOBALS['visiteur_session']['prefs']['display']) - ? $GLOBALS['visiteur_session']['prefs']['display'] + ? (int) $GLOBALS['visiteur_session']['prefs']['display'] : 0; -$GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? $_COOKIE['spip_ecran'] : "etroit"; +$GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? preg_replace('/[^a-z0-9]/i', '', $_COOKIE['spip_ecran']) : "etroit"; // si la langue est specifiee par cookie et ne correspond pas // (elle a ete changee dans une autre session, et on retombe sur un vieux cookie)