Skip to content
Extraits de code Groupes Projets
Valider e9e104fc rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Fix #3371 : dans la fonction typo, si un flag espace_prive=1 est present dans...

Fix #3371 : dans la fonction typo, si un flag espace_prive=1 est present dans le env, on echappe tout html suspect, ie qui ne passe pas a travers safehtml sans censure. Pour limiter l'impact perfo on conditionne l'echappement a la presence des caracteres < et = dans le texte, c'est a dire une balise avec un attribut, ce qui ne traitera donc quasiment aucun contenu par defaut, sauf quelques rares <span lang='en'> ou autre curiosite de ce type
parent af9de33d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -237,6 +237,12 @@ function typo($letexte, $echapper=true, $connect=null, $env=array()) {
if ($interdire_script)
$letexte = interdire_scripts($letexte);
// Dans l'espace prive on se mefie de tout contenu dangereux
// https://core.spip.net/issues/3371
if (isset($env['espace_prive']) AND $env['espace_prive']){
$letexte = echapper_html_suspect($letexte);
}
return $letexte;
}
......
......@@ -392,13 +392,35 @@ function echapper_faux_tags($letexte){
$letexte = "";
while (count($textMatches)) {
// un texte a echapper
$letexte .= str_replace(array("<"),array('&lt;'),array_shift($textMatches));
$letexte .= str_replace("<",'&lt;',array_shift($textMatches));
// un tag html qui a servit a faite le split
$letexte .= array_shift($textMatches);
}
return $letexte;
}
/**
* Si le html contenu dans un texte ne passe pas sans transformation a travers safehtml
* on l'echappe
* si safehtml ne renvoie pas la meme chose on echappe les < en &lt; pour montrer le contenu brut
*
* @param string $texte
* @return string
*/
function echapper_html_suspect($texte){
if (strpos($texte,'<')===false OR strpos($texte,'=')===false)
return $texte;
// on teste sur strlen car safehtml supprime le contenu dangereux
// mais il peut aussi changer des ' en " sur les attributs html,
// donc un test d'egalite est trop strict
if (strlen(safehtml($texte))!==strlen($texte)){
$texte = str_replace("<","&lt;",$texte);
}
return $texte;
}
/**
* Sécurise un texte HTML
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter