From 5dd1e23b33040127cbf4eeb00167385a7edeec59 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Mon, 11 Sep 2006 21:39:05 +0000 Subject: [PATCH] ne pas utiliser htmlspecialchars() sur les urls, mais entites_html(), qu'on va d'ailleurs installer dans vider_url(), pour la peine (cf. http://thread.gmane.org/gmane.comp.web.spip.devel/36769/focus=36847 ) --- ecrire/balise/formulaire_forum.php | 2 +- ecrire/exec/auteur_infos.php | 2 +- ecrire/inc/filtres.php | 7 +++++-- ecrire/inc/forum_insert.php | 2 +- ecrire/inc/texte.php | 2 +- ecrire/public/composer.php | 1 - ecrire/public/interfaces.php | 18 +++++++++--------- 7 files changed, 18 insertions(+), 16 deletions(-) diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php index 6020d84bd9..c99043b449 100644 --- a/ecrire/balise/formulaire_forum.php +++ b/ecrire/balise/formulaire_forum.php @@ -218,7 +218,7 @@ function inclure_previsu($texte,$titre, $email_auteur, $auteur, $url_site, $nom_ 'email_auteur' => safehtml($email_auteur), 'auteur' => safehtml(typo($auteur)), 'texte' => safehtml(propre($texte)), - 'url_site' => htmlspecialchars(vider_url($url_site)), + 'url_site' => vider_url($url_site), 'nom_site_forum' => safehtml(typo($nom_site_forum)), 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)), 'erreur' => $erreur, diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php index 42789b5d66..e501e16816 100644 --- a/ecrire/exec/auteur_infos.php +++ b/ecrire/exec/auteur_infos.php @@ -140,7 +140,7 @@ if (strval($nom)!='') { $auteur['bio'] = corriger_caracteres($bio); $auteur['pgp'] = corriger_caracteres($pgp); $auteur['nom_site'] = corriger_caracteres($nom_site_auteur); // attention mix avec $nom_site_spip ;( - $auteur['url_site'] = vider_url($url_site); + $auteur['url_site'] = vider_url($url_site, false); if ($new_pass) { $htpass = generer_htpass($new_pass); diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 4c3845175c..cba65f1ea5 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -403,15 +403,18 @@ function attribut_html($texte) { } // Vider les url nulles comme 'http://' ou 'mailto:' +// et leur appliquer un htmlspecialchars() + gerer les & // http://doc.spip.org/@vider_url -function vider_url($url) { +function vider_url($url, $entites = true) { # un message pour abs_url $GLOBALS['mode_abs_url'] = 'url'; $url = trim($url); - if (eregi("^(http:?/?/?|mailto:?)$", $url)) + if (preg_match(",^(http:?/?/?|mailto:?)$,iS", $url)) return ''; + if ($entites) $url = entites_html($url); + return $url; } diff --git a/ecrire/inc/forum_insert.php b/ecrire/inc/forum_insert.php index ce05307358..8cd0a4f32a 100644 --- a/ecrire/inc/forum_insert.php +++ b/ecrire/inc/forum_insert.php @@ -255,7 +255,7 @@ function inc_forum_insert_dist() { else $id_thread = $id_message; # id_thread oblige INSERT puis UPDATE. - $url_site = vider_url($url_site); # pas de http:// + $url_site = vider_url($url_site, false); # pas de http:// spip_query("UPDATE spip_forum SET id_parent = $id_forum, id_rubrique = $id_rubrique, id_article = $id_article, id_breve = $id_breve, id_syndic = $id_syndic, id_auteur = $id_auteur, id_thread = $id_thread, date_heure = NOW(), titre = ".spip_abstract_quote(corriger_caracteres($titre)).", texte = ".spip_abstract_quote(corriger_caracteres($texte)).", nom_site = ".spip_abstract_quote(corriger_caracteres($nom_site_forum)).", url_site = ".spip_abstract_quote(corriger_caracteres($url_site)).", auteur = ".spip_abstract_quote(corriger_caracteres($auteur)).", email_auteur = ".spip_abstract_quote(corriger_caracteres($email_auteur)).", ip = " . spip_abstract_quote($GLOBALS['ip']) . ", statut = '$statut' WHERE id_forum = $id_message"); // Entrer les mots-cles associes diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php index e59419f264..23f91ccccc 100644 --- a/ecrire/inc/texte.php +++ b/ecrire/inc/texte.php @@ -635,7 +635,7 @@ function calculer_url ($lien, $texte='', $pour='url') { if ($pour == 'titre') return $texte; - $lien = entites_html(vider_url($lien)); + $lien = vider_url($lien); // petites corrections d'URL if (preg_match(",^www\.[^@]+$,S",$lien)) diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php index c554f10943..0888bb4164 100644 --- a/ecrire/public/composer.php +++ b/ecrire/public/composer.php @@ -63,7 +63,6 @@ function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) { } // Tester si le compilateur renvoie une erreur - if (is_array($skel_code)) erreur_squelette($skel_code[0], $skel_code[1]); else { diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php index f504613040..a6337f4ab4 100644 --- a/ecrire/public/interfaces.php +++ b/ecrire/public/interfaces.php @@ -272,7 +272,7 @@ $table_des_traitements['DATE_NOUVEAUTES'][]= 'vider_date(%s)'; $table_des_traitements['DATE_REDAC'][]= 'vider_date(%s)'; $table_des_traitements['DESCRIPTIF'][]= 'propre(%s)'; $table_des_traitements['LIEN_TITRE'][]= 'typo(%s)'; -$table_des_traitements['LIEN_URL'][]= 'htmlspecialchars(vider_url(%s))'; +$table_des_traitements['LIEN_URL'][]= 'vider_url(%s)'; $table_des_traitements['MESSAGE'][]= 'propre(%s)'; $table_des_traitements['NOM_SITE_SPIP'][]= 'typo(%s)'; $table_des_traitements['NOM_SITE'][]= '%s'; # construire_titre_lien -> typo @@ -286,16 +286,16 @@ $table_des_traitements['TAGS'][]= '%s'; $table_des_traitements['TEXTE'][]= 'propre(%s)'; $table_des_traitements['TITRE'][]= 'typo(%s)'; $table_des_traitements['TYPE'][]= 'typo(%s)'; -$table_des_traitements['URL_ARTICLE'][]= 'htmlspecialchars(vider_url(%s))'; -$table_des_traitements['URL_BREVE'][]= 'htmlspecialchars(vider_url(%s))'; -$table_des_traitements['URL_DOCUMENT'][]= 'htmlspecialchars(vider_url(%s))'; -$table_des_traitements['URL_FORUM'][]= 'htmlspecialchars(vider_url(%s))'; -$table_des_traitements['URL_MOT'][]= 'htmlspecialchars(vider_url(%s))'; -$table_des_traitements['URL_RUBRIQUE'][]= 'htmlspecialchars(vider_url(%s))'; +$table_des_traitements['URL_ARTICLE'][]= 'vider_url(%s)'; +$table_des_traitements['URL_BREVE'][]= 'vider_url(%s)'; +$table_des_traitements['URL_DOCUMENT'][]= 'vider_url(%s)'; +$table_des_traitements['URL_FORUM'][]= 'vider_url(%s)'; +$table_des_traitements['URL_MOT'][]= 'vider_url(%s)'; +$table_des_traitements['URL_RUBRIQUE'][]= 'vider_url(%s)'; $table_des_traitements['DESCRIPTIF_SITE_SPIP'][]= 'propre(%s)'; $table_des_traitements['URL_SITE'][]= 'calculer_url(%s)'; -$table_des_traitements['URL_SOURCE'][]= 'htmlspecialchars(vider_url(%s))'; -$table_des_traitements['URL_SYNDIC'][]= 'htmlspecialchars(vider_url(%s))'; +$table_des_traitements['URL_SOURCE'][]= 'vider_url(%s)'; +$table_des_traitements['URL_SYNDIC'][]= 'vider_url(%s)'; $table_des_traitements['ENV'][]= 'entites_html(%s)'; -- GitLab