En Spip 3.1.6, y-a-t'il moyen d’interdire à l'auteur certains tags HTML dans la rédaction de son article ? Les traitements auto de spip avant insertion en base intégre-t'il un mécanisme de suppression et/ou échappement auto (autre que ceux de sécurité pour les scripts) ? Si oui lesquels ?
Si je veux par exemple interdire un tag <body> ou <meta> est-ce possible ?
Ou ne puis-je que le supprimer avant insertion ? Si oui, avec quel pipeline ?
Ceci car un auteur sur un des sites dont je m'occupe, confond livre à colorier et publication, et s'amuse à injecter du code obtenu par un éditeur wysiwyg dans chacun de ses articles, de la balise html en passant par les meta, head et body, et je cherche une autre solution plus propice à ma santé que de continuer à m'énerver en vain contre lui.
Le seul truc pour l'heure que j'ai mis en place est de filtrer le texte avant l'affichage, mais je voudrais mettre en place aujourd’hui quelque chose de plus radical qui règle le problème à la source.
Merci si vous aviez quelques suggestions
Le 24/09/2017 à 17:06, Pierre KUHN a écrit :
> Salut
>
> Tu as regarder le pipeline pre_insertion ?
> Tu pourrais ainsi faire des regex pour des déplacés en masse.
>
Bonjour,
J'ai vu son existence, et imaginé la piste que tu évoques pour les regex ,mais je me demandais si je pouvais carrément empêcher la validation de l'article, histoire que ce soit moins transparent pour l'auteur. De plus, ses articles sont tellement pourris que si je vire les balises en questions, l'affichage ne se fait plus correctement. De ce fait je voudrai privilégier l’impossibilité de valider l'article si c'était possible.
C'est l'idée. Je ne sais pas quelle piste explorer. Je n'ai pas chercher plus que cela pour l'instant. J'imagine que le formulaire article est un formulaire comme un autre et que l'on doit pouvoir peut-être surcharger la fonction vérifier ?
J'aurai préféré une solution qui fait appel à un pipeline si c'est le cas.
C'est l'idée. Je ne sais pas quelle piste explorer. Je n'ai pas chercher plus que cela pour l'instant. J'imagine que le formulaire article est un formulaire comme un autre et que l'on doit pouvoir peut-être surcharger la fonction vérifier ?
J'aurai préféré une solution qui fait appel à un pipeline si c'est le cas.
Il y a bien formulaires_editer_article_verifier dans prive/formulaires/editer_articles, j'ai l'impression que je vais devoir y passer.
En décidant pareil ca doit le faire.
Je n'ai pas de pc pour t'aider ce soir.
Il y a une fonction dans la verif
$erreurs = formulaires_editer_objet_verifier('article', $id_article, array('id_parent'));
je ne perds pas espoir qu'un pipeline soit traversé, je fouille.
En décidant pareil ca doit le faire.
Je n'ai pas de pc pour t'aider ce soir.
Il y a une fonction dans la verif
$erreurs = formulaires_editer_objet_verifier('article', $id_article, array('id_parent'));
je ne perds pas espoir qu'un pipeline soit traversé, je fouille.
Réglé avec le pipeline formulaire_verifier (me reste à écrire les vérifs ):
//faire verifs ici, retourner false si présence de tags
return true;
}
function formulaire_verifier_tags($flux){
if ($flux['args']['form'] == 'editer_article'){
if ($texte = _request('texte')){
if (!verifier_presence_tags_interdits($texte))
$flux['data']['erreurtags'] = 'erreur';
}
}
En décidant pareil ca doit le faire.
Je n'ai pas de pc pour t'aider ce soir.
Il y a une fonction dans la verif
$erreurs = formulaires_editer_objet_verifier('article', $id_article, array('id_parent'));
je ne perds pas espoir qu'un pipeline soit traversé, je fouille.
Réglé avec le pipeline formulaire_verifier (me reste à écrire les vérifs ):
Au cas où ça intéresse quelqu'un, je vais le faire comme ça, j'ai testé le processus, ça fonctionne. Par contre, je suis nul en regex, si quelqu'un veut m'aider, je suis vraiment preneur. Je veux filtrer les balises en casse insensible et en tenant compte des éventuels espaces, et possibles attributs de balise, qui pourraient se trouver à l'intérieur des crochets d'ouverture comme ceux de fermetures. Si quelqu'un a un exemple à me donner avec la balise body ça ferait mon bonheur, je le déclinerai pour les 3 ou 4 autres balises que je souhaite aussi filtrer.
Dans l'exemple que je donne, le message d'erreur obtenu indique précisément le tag trouvé qui est interdit, et le message s'affiche là où il faut dans le formulaire natif de Spip, sans avoir à surcharger ce formulaire.
function verifier_presence_tags_interdits($text){
$flux['erreur']=false;
if (preg_match("/body/i", $text)) {
$flux['erreur']=true;
$flux['text']='pas de tag body !';
}
return $flux
}
function formulaire_verifier_tags($flux){
if ($flux['args']['form'] == 'editer_article'){
if ($texte = _request('texte')){
$test=verifier_presence_tags_interdits($texte);
if ($test['erreur'])
$flux['data']['texte'] = $test['text'];
}
}
en effet tu es sur le bon chemin, a toi de bloquer le bon tag qui va l'obliger a tout bien faire.
Merci pierre, tu m'as bien aidé lorsque tu as évoqué la vérification et son retour erreur. Maintenant si un pro des regex pouvait se joindre à nous ce serait le top
De plus, il y aurait de quoi créer un plugin là, il me semble.
en effet tu es sur le bon chemin, a toi de bloquer le bon tag qui va l'obliger a tout bien faire.
Merci Pierre, tu m'as bien aidé lorsque tu as évoqué la vérification et son retour erreur. Maintenant si un pro des regex pouvait se joindre à nous ce serait le top
De plus, il y aurait de quoi créer un plugin là, il me semble.
Améliore avec
|preg_match("#</*(script|iframe|frame|frameset|html|body|)[^>]*>#i", $contents)|
C'est beau ça, je kif
Les scripts je crois que c'est natif, comme php, sans en être certain, mais d'après mes lectures des contribs et docs bienveillantes, je crois que c'est le cas (merci aussi à tous leurs rédacteurs), et plus que souhaitable. Je vais tester, MERCI.
Tu te sens de faire un plugins là-dessus ?
Avec un formulaire de config qui permette de choisir les tags à prohiber, ça serait top, et surtout tellement utile. Il me semble que le code que je donne et que je vais personnellement me contenter pour l'heure de mettre dans mes_options, par ignorance encore du mécanisme complet des plugins, ça devrait être réalisable.
Hop là ! Alors, tu le sais, la vie, c'est compliqué
Plus sérieusement, tu les formes, après ils font ce qu'ils veulent. Tu en as 99% qui comprennent et respecte, après ils restent les farceurs, ou les artistes, si tu préfères
J'ai 140 sites en maintenance sous Spip, en déclinaisons de sections géographiques et fonctionnels, autant, voir multiplié par deux ou trois, auteurs, et je suis confronté régulièrement depuis le début aux 1%. Je devrais les remercier pour tous les progrès qu'ils m'ont amené à faire pour contrer leurs aspirations contre productives depuis ces dix ans, mais il y a des fois, je fatigue
Je passe autant de temps à offrir à la communauté des fonctionnalités intéressantes, qu'anticiper leurs... erreurs...
Il me faut construire un carcan, pas le choix (j'ai un cahier de charges). Et j'imagine que celui dont nous parlons serait utile à d'autre.
On n'est pas bien là ? (air connu dans une pub contemporaine )
Bein moi je dis, d'après les tests que je viens d'effectuer sans approfondir, qu'on n'est pas mal du tout
Aucune erreur sur mes tests.
Super Merci, je dois lâcher l'affaire pour ce soir, j'approfondirai ça demain ou dans les jours qui suivent et reviendrais pour donner mon sentiment final.
Quoiqu'il en soit, d'ores et déjà, MERCI Pierre. je donnerai l'url des sites dont je parlais, d'ici demain soir, après maintenances RWD prévu demain soir.
Bonne soirée.