From d10a0f386d6e89bc4aeda8967e2b2a53aca5bd3c Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Sun, 19 Nov 2006 19:48:28 +0000 Subject: [PATCH] "proteger dans le contenu le javascript venant des modeles (et uniquement celui la) lorsque l'on est identifie l'echappement utilise l'alea tournant de l'auteur connecte, ce qui evite un risque d'injection de javascript encode64 dans un article par un auteur malveillant" --- ecrire/inc/texte.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php index 4af04e725e..e0d10a7280 100644 --- a/ecrire/inc/texte.php +++ b/ecrire/inc/texte.php @@ -386,6 +386,15 @@ function echappe_js($t,$class='') { $t); return $t; } +function protege_js_modeles($t) { + if (isset($GLOBALS['auteur_session']['alea_actuel'])){ + $a = $GLOBALS['auteur_session']['alea_actuel']; + if (preg_match_all(',<script.*?($|</script.),isS', $t, $r, PREG_SET_ORDER)) + foreach ($r as $regs) + $t = str_replace($regs[0],code_echappement($regs[0],'javascript'.$a),$t); + } + return $t; +} // Securite : empecher l'execution de code PHP, en le transformant en joli code // http://doc.spip.org/@interdire_scripts @@ -1079,6 +1088,7 @@ function traiter_modeles($texte, $doublons=false, $echap='') { // le remplacer dans le texte if ($modele !== false) { + $modele = protege_js_modeles($modele); $rempl = code_echappement($modele, $echap); $texte = substr($texte, 0, $a) . $rempl @@ -1512,6 +1522,10 @@ function propre($letexte) { if (!_DIR_RESTREINT) $letexte = interdire_scripts($letexte); + // Reinserer le javascript de confiance (venant des modeles) + if (isset($GLOBALS['auteur_session']['alea_actuel'])) + $letexte = echappe_retour($letexte,"javascript".$GLOBALS['auteur_session']['alea_actuel']); + return $letexte; } -- GitLab