Browse Source

#3371 (suite de r22428) on complete la fonction echapper_html_suspect pour permettre de l'appeler sur du contenu qui passe par propre sans declencher trop de faux positif en lui ajoutant un argument $strict

+ appel de la fonction en filtre dans l'affichage de #PGP
+ chaine de langue pour signaler le texte mal forme quand on l'echappe
(et du coup on integre un emoji unicode dans le code pour afficher un signe warning qui porte le message en title)
3.2
Cerdic 5 years ago
parent
commit
a9989466c1
  1. 17
      ecrire/inc/texte_mini.php
  2. 1
      ecrire/lang/ecrire_fr.php
  3. 2
      prive/objets/contenu/auteur.html

17
ecrire/inc/texte_mini.php

@ -449,10 +449,19 @@ function echapper_faux_tags($letexte) {
* si safehtml ne renvoie pas la meme chose on echappe les < en &lt; pour montrer le contenu brut
*
* @param string $texte
* @param bool $strict
* @return string
*/
function echapper_html_suspect($texte) {
if (strpos($texte, '<') === false or strpos($texte, '=') === false) {
function echapper_html_suspect($texte, $strict=true) {
if (!$texte
or strpos($texte, '<') === false or strpos($texte, '=') === false) {
return $texte;
}
// quand c'est du texte qui passe par propre on est plus coulant tant qu'il y a pas d'attribut du type onxxx=
// car sinon on declenche sur les modeles ou ressources
if (!$strict and
(strpos($texte,'on') === false or !preg_match(",<\w+.*\bon\w+\s*=,UimsS", $texte))
){
return $texte;
}
@ -461,6 +470,10 @@ function echapper_html_suspect($texte) {
// donc un test d'egalite est trop strict
if (strlen(safehtml($texte)) !== strlen($texte)) {
$texte = str_replace("<", "&lt;", $texte);
if (!function_exists('attribut_html')) {
include_spip('inc/filtres');
}
$texte = "<mark title='".attribut_html(_T('erreur_contenu_suspect'))."'></mark> ".$texte;
}
return $texte;

1
ecrire/lang/ecrire_fr.php

@ -147,6 +147,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'erreur_plugin_prefix_manquant' => 'Espace de nommage du plugin non défini',
'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; manquant dans le fichier de définition',
'erreur_plugin_version_manquant' => 'Version du plugin manquante',
'erreur_contenu_suspect' => 'Texte mal formé',
// H
'htaccess_a_simuler' => 'Avertissement : la configuration de votre serveur HTTP ne tient pas compte des fichiers @htaccess@. Pour pouvoir assurer une bonne sécurité, il faut que vous modifiiez cette configuration sur ce point, ou bien que les constantes @constantes@ (définissables dans le fichier mes_options.php) aient comme valeur des répertoires en dehors de @document_root@.',

2
prive/objets/contenu/auteur.html

@ -18,7 +18,7 @@
</div>
<div class="champ contenu_pgp[ (#PGP*|strlen|?{'',vide})]">
<div class='label'>PGP</div>
<div dir='#LANG_DIR' class='#EDIT{pgp} pgp'>[<code>(#PGP|image_reduire{500,0})</code>]</div>
<div dir='#LANG_DIR' class='#EDIT{pgp} pgp'>[<code>(#PGP|echapper_html_suspect|image_reduire{500,0})</code>]</div>
</div>
[<div class="champ contenu_notes">
<div class='label'><:info_notes:></div>

Loading…
Cancel
Save