[SPIP] ~v3.0.21-->v3.0.22
[lhc/web/www.git] / www / ecrire / inc / filtres.php
index ae61ab2..5223d09 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -419,6 +419,19 @@ function filtrer_entites($texte) {
        return $texte;
 }
 
+/**
+ * Version securisee de filtrer_entites
+ * @param string $t
+ * @return string
+ */
+if (!function_exists('filtre_filtrer_entites_dist')) {
+       function filtre_filtrer_entites_dist($t) {
+               include_spip('inc/texte');
+               return interdire_scripts(filtrer_entites($t));
+       }
+}
+
+
 // caracteres de controle - http://www.w3.org/TR/REC-xml/#charsets
 // http://doc.spip.org/@supprimer_caracteres_illegaux
 function supprimer_caracteres_illegaux($texte) {
@@ -426,7 +439,7 @@ function supprimer_caracteres_illegaux($texte) {
        static $to = null;
        
        if (is_array($texte)) {
-               return array_map('corriger_caracteres_windows', $texte);
+               return array_map('supprimer_caracteres_illegaux', $texte);
        }
        
        if (!$to) $to = str_repeat('-', strlen($from));
@@ -2507,8 +2520,10 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') {
        
        if (!function_exists('calculer_cle_action'))
                include_spip("inc/securiser_action");
-       $cle = calculer_cle_action($form.(is_array($c)?serialize($c):$c));
-       $c = serialize(array($c,$cle));
+
+       $c = serialize($c);
+       $cle = calculer_cle_action($form . $c);
+       $c = "$cle:$c";
 
        // on ne stocke pas les contextes dans des fichiers caches
        // par defaut, sauf si cette configuration a ete forcee
@@ -2575,10 +2590,20 @@ function decoder_contexte_ajax($c,$form='') {
                if (function_exists('gzdeflate') && function_exists('gzinflate'))
                        $c = @gzinflate($c);
        }
-       list($env, $cle) = @unserialize($c);
 
-       if ($cle == calculer_cle_action($form.(is_array($env)?serialize($env):$env)))
-               return $env;
+       // extraire la signature en debut de contexte
+       // et la verifier avant de deserializer
+       // format : signature:donneesserializees
+       if ($p = strpos($c,":")){
+               $cle = substr($c,0,$p);
+               $c = substr($c,$p+1);
+
+               if ($cle == calculer_cle_action($form . $c)) {
+                       $env = @unserialize($c);
+                       return $env;
+               }
+       }
+
        return false;
 }