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)