Project

General

Profile

Anomalie #4306

Erreur détection code mal formé

Added by jluc - about 2 months ago. Updated 12 days ago.

Status:
Nouveau
Priority:
Normal
Assignee:
-
Category:
sécurité
Target version:
Start date:
03/06/2019
Due date:
% Done:

0%

Resolution:
Navigateur:

Description

Le code suivant est détecté comme malformé sur programmer.spip (SPIP 3.2.3 SVN [24210]) et contrib (SPIP 3.2.3)

<onglet  />
<cadre>
$onglet2 = ($quoi == 'actifs' ? 'plugins_actifs' : 'admin_plugin');
</cadre>

contrib var_mode=traduction.png View (17.1 KB) jluc -, 04/01/2019 06:52 PM

programmer_configuration_tickets.jpg View - page "configuration des tickets" sur programmer.spip (110 KB) jluc -, 04/02/2019 09:32 AM

History

#1 Updated by jluc - about 2 months ago

Il manque une balise «code» que redmine a avalé.

<xmp>
<onglet />
<cadre>
$onglet2 = ($quoi == 'actifs' ? 'plugins_actifs' : 'admin_plugin');
</cadre>
</xmp>

Ou sinon voir là : https://contrib.spip.net/ecrire/?exec=article&id_article=5117

#2 Updated by jluc - about 2 months ago

décidément la balise code se rebelle. En pseudo html c'est :

code 
   /onglet
/code
cadre
   $onglet2 = ($quoi == ’actifs’ ? ’plugins_actifs’ : ’admin_plugin’) ;Retour ligne automatique
/cadre

Ou sinon voir là : https://contrib.spip.net/ecrire/?exec=article&id_article=5117

#3 Updated by b b about 2 months ago

  • Target version set to 3.2

#4 Updated by jluc - about 2 months ago

Pas besoin de la balise code en fait. Plus simple encore :

<o />
<cadre>
$ong = 1;
</cadre>

Par contre, avec $on à la place de $ong, ça n'est plus détecté comme mal formé

#5 Updated by marcimat 🌈 about 2 months ago

Dès qu’il y a "on[qqc]" dans une balise html, c’est considéré mal formé. Ici, peut être qu’il ne voit pas la fermeture de la balise o.

#6 Updated by jluc - about 2 months ago

C'est un début d'explication. Avec $on, il n'y a pas d'erreur... peut être parcequ'il faut une suite à "on"

Plus simple encore pour déclancher :

<o >$ong = 1 ;</o>

Par contre, ça n'est pas déclanché s'il n'y a pas l'espace aprés le o, ou le g aprés le $on

#7 Updated by jluc - about 2 months ago

faux positifs aussi pour les liens d'une page de config du plugin ticket : https://programmer.spip.net/ecrire/?exec=configurer_tickets&cfg=typologie

#8 Updated by jluc - 22 days ago

Faux positifs aussi pour var_mode=traduction lorsqu'il y a des arguments dans la chaîne.

Sur contrib ça donne la capture d'écran ci jointe.

#10 Updated by jluc - 21 days ago

Dans la function echapper_html_suspect($texte) de ecrire/inc/texte_mini.php il y a

// 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;
}

Pas sûr que ça explique tous les pbs, mais ça semble impossible de tester spécifiquement les attributs avec une simple regexp comme ça.

#11 Updated by Guillaume Fahrner 13 days ago

Parce que tout est lié :] la solution proposée ici https://core.spip.net/issues/3926 (htmlPurifier devient safehtml) réglerait ce problème, du :

- à la fonction propre() de /ecrire/inc/texte.php qui fait un echapper_html_suspect() avant le echappe_html() : on se retrouve a faire passer des balises < code > non protégé/échappé dans safehtml(), ca ne se voit pas coté public si le mode parano est inactif (pas de filtrage)
- à la function echapper_html_suspect($texte) de ecrire/inc/texte_mini.php qui encode l'entrée retournée si safehtml($input)!==$input

#12 Updated by jluc - 13 days ago

mm a installé htmlpurifier sur programmer.spip.net et ça résoud les problèmes décrits :

- var_mode=traduction est propre
- la config de "tickets" est propre
- les divers codes exemples cités plus haut sur ce ticket sont ok : https://programmer.spip.net/ecrire/?exec=article&id_article=965

Et pas de pb de rendu constaté dans le privé, où htmlpurifier s'applique même en mode non-parano.

#13 Updated by b b 12 days ago

Super, merci pour le retour, ça va permettre de tester le truc sur un site de plus avant de décider de son "éventuelle" intégration dans le core.

Also available in: Atom PDF