Erreur détection code mal formé #4306

Closed
opened 4 years ago by JLuc · 15 comments
JLuc commented 4 years ago

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

``

$onglet2 = ($quoi == 'actifs' ? 'plugins_actifs' : 'admin_plugin');

Le code suivant est détecté comme malformé sur programmer.spip (SPIP 3.2.3 SVN [24210]) et contrib (SPIP 3.2.3) <pre> `<onglet />` <cadre> $onglet2 = ($quoi == 'actifs' ? 'plugins_actifs' : 'admin_plugin'); </cadre> </pre>
Poster

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

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

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

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
Poster

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

décidément la balise code se rebelle. En pseudo html c'est : <pre> code /onglet /code cadre $onglet2 = ($quoi == ’actifs’ ? ’plugins_actifs’ : ’admin_plugin’) ;Retour ligne automatique /cadre </pre> Ou sinon voir là : https://contrib.spip.net/ecrire/?exec=article&id_article=5117
b_b commented 4 years ago
Owner

Version cible mise à 3.2

**Version cible mise à 3.2**
Poster

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


$ong = 1;

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

Pas besoin de la balise code en fait. Plus simple encore : <pre> <o /> <cadre> $ong = 1; </cadre> </pre> Par contre, avec $on à la place de $ong, ça n'est plus détecté comme mal formé
Owner

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.

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.
Poster

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 :

$ong = 1 ;

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

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 : <pre><o >$ong = 1 ;</o></pre> 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
Poster

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

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

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.

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.
Poster
There is no content yet.
Poster

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.

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.

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
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
Poster

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

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

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.
b_b commented 4 years ago
Owner

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.

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.

Hello :-)
Je pense que je confirme (cela peut venir de moi aussi) qu'il y a un problème avec sur programmer
J'ai fait un ticket et cela m'affiche un texte qui n'est pas bon (voir copie d'écran), alors qu'il l'était quand je cliquais sur "voir" dans le porte plume.
Franck

Hello :-) Je pense que je confirme (cela peut venir de moi aussi) qu'il y a un problème avec <cadre></cadre> sur programmer J'ai fait un ticket et cela m'affiche un texte qui n'est pas bon (voir copie d'écran), alors qu'il l'était quand je cliquais sur "voir" dans le porte plume. Franck
Owner

on peut fermer ici donc
Statut changé à Fermé

on peut fermer ici donc **Statut changé à Fermé**
Sign in to join this conversation.
No Milestone
No project
No Assignees
6 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.