[Résolu] Souci de chargement de formulaires suite 4.4.10

Bonjour,

Sur un site (ici: Le Carré des canotiers) le formulaire en bas de page ne se charge plus et ça a l’air concomitant avec toutes les mises à jour de ces derniers temps … J’ai testé PHP7 et 8, idem, ce sont des formulaires faits à la main, ils marchaient encore récemment … J’ai ça qui s’affiche à la place:

<?php include_once("./" . _DIR_RACINE . "ecrire/balise/formulaire_.php"); if ($lang_select = "fr") $lang_select = lang_select($lang_select); inserer_balise_dynamique(balise_FORMULAIRE__dyn('FORMULAIRE_EDITER_ACCASTILLAGE', 'new', '5', '/contribuer-a-l-inventaire/ajouter-un-objet/'), array('squelettes/inclure/contribforms.html', 'html_25b80cb8f8c1e58ad7d2d901b853d703', '', 0, 'fr')); if ($lang_select) lang_select(); ?> 

En erreur PHP j’ai un petit warning sur html5up_phantom mais rien qui semble bloquant.
Si j’ajoute ce qu’il faut pour afficher les erreurs je n’ai rien de plus que ce qui précède. Ce genre d’erreur peut venir que quoi, si quelqu’un a une piste je suis intéressé :slight_smile:
Pierre

PS: une précision: si je commente absolument tout le code dans le fichier php du formulaire j’ai la même erreur, donc on ne dirait pas que c’est un souci dans le formulaire lui-même mais plustot dans son appel … et comme je l’ai dit ces formulaires fonctionnent depuis au moins 3 ans.
PS2: et zut, il faut creer un compte de contributeur pour voir cette page …
PS3: et je trouve bizarre le if ($lang_select = "fr") dans cette erreur … ça vient de Spip non ? ne devrait-on pas avoir if ($lang_select == "fr") ?

Pas tres clair ton message.

Bon dejà quel est le contenu du fichier html?

Comment est appelé le formulaire ? Quel est l’imbrication des inclusions ?

Bonjour,

Le formulaire est appelé par un:

[(#ID_RUBRIQUE|=={14}|?{#FORMULAIRE_EDITER_ACCASTILLAGE{new, 5, #SELF}})]

Qui est dans un inclure/contribforms.html lui-même appelé depuis rubrique.html … ce formulaire a bien sûr un formulaires/editer_accastillage.php et html …
Et tout ça fonctionne depuis plusieurs années.

Merci.
Pierre

Et si tu transforme en :
[(#ID_RUBRIQUE|=={14}|oui)#FORMULAIRE_EDITER_ACCASTILLAGE{new, 5, #SELF}]

1 « J'aime »

Hum ca ressemble au bug qu’on a eu dans spip lui meme.

Je suis occupé.

Bonjour @RealET ,

Ben oui ça semble solutionner le problème !! C’est les récentes mises à jour qui ont généré ce problème ?
Merci en tous cas, je propage aux 3 formulaires qui sont sur le même modèle. Je ne marque pas encore comme résolu dans l’attente d’un retour de @maieul et pour voir s’il faut ouvrir un ticket de bug mais grand merci !!

Pierre

1 « J'aime »

oui ce sont les recentes maj. Compliqué de savoir si un correctif peut se faire.

Oui, je pense que cette suggestion fonctionne d’une part.

Encore un cas ennuyeux suite à la 4.4.10…, et je sais pas si on va savoir le corriger celui-là…

Y-a-t-il une différence fonctionnelle entre les 2 syntaxes ?

Pour faire court, spip applique le filtre de sécurité à sa balise UNE fois les filtres passés. Et comme on est plus severe sur la sécu dans les toutes dernières versions, bah ca a pété avec la syntaxe [(#ID|?{...})].

Avec |oui) tu met ton formulaire non pas comme argument d’un filtre mais comme partie optionelle d’une balise… et donc ca marche normalement à tout les coup.

Mais sémantiquement les 2 se valent.

Ok merci pour les explications, et pour le boulot sur ces problèmes.
Je marque le sujet comme résolu.
Pierre.

Je ne comprend pas précisément

et quelles sont sur les squelettes les implications et conséquences pratiques de

Car cette écriture est légitime et banale.

Si la syntaxe est/était réduite-restreinte, il faudra-it revisiter tous les squelettes ! Ce n’est pas une mince affaire

Je pense qu’en SPIP 4.4 on va être obligé de revenir en arrière et de se contenter d’un spip_sanitize_from_request() sur les balises XXX qui viennent du env (et donc avoir quelque chose différent de #ENV{xxx} parce que ça pète trop de choses et je vois pas comment faire autrement, vu qu’on est sur des releases mineures.

Par contre en SPIP 5 on va garder ce qu’on a fait et il y aura rupture de compat là dessus, obligeant à écrire l’expression autrement, soit avec un [(#ID*|?{...})] soit avec un [(#ID|oui) ...)]

Soit. Pour 4.4 c’est cohérent avec les conventions de numérotation de pas introduire une rupture de compat.

¿ Mais en spip5 avec cette nouvelle couche de sécurisation, selon quel critère devrons nous choisir

  • de mettre un * dans un appel de type [(#ID*|?{...})]
  • mais ne de pas en mettre dans [(#ID|oui)... ]

Car dans les 2 cas, il y a appel de filtre sur #ID, et dans les 2 cas le résultat n’est pas utilisé en tant que tel : je vois pas de différence.

Il me semble qu’il y a de toute facon un problème de fond : pourquoi est-ce que les fonctions de sécurité doivent-elles s’appliquer aux balise UNE FOIS LES FILTRES PASSÉS et pas aux balise AVANT LE PASSAGE DES FILTRES ?

Peut-être parce que c’est le résultat final qui peut-être dangereux et qu’on veut sécuriser ?

Suppose que tu affiches un truc comme

[(#TOTO|replace{'.',''})]

Et que tu appliques interdire_scripts sur le contenu de #TOTO avant les filtres : il suffit d’injecter <.s.c.r.i.p.t.>alert('paf le chien');<./.s.c.r.i.p.t> pour passer à travers interdire_scripts et produire du contenu dangereux après passage du filtre

Même si c’est pénible tu as pas d’autres choix que de sécuriser par défaut le texte produit final et non la seule valeur d’entrée des filtres.

@cerdic merci pour l’explication. Effectivement. Dont acte.