Hey les gens j'espère que vous allez bien =)

Voilà je reviens vers vous car j'ai envie de mettre de htmlspecialchars() dans mes baliases pre directement dans les textaria.
J'ai essayé et cela ne fonctionne absolument pas.

Ce que je fais

Pour résoudre ce problèmé j'ai du mettre des symboles HTML au début de chaques ouverture des baliases comme ceci

<?php

Et cela fonctionne très bien.

Mais le problème quand j'édite mes articles mon site rremet les balises et quand j'enregistre, lmes codes disparaissent car ils ont été interprés.

Comme faire pour éviter cela ?

PS : Je travail sous Laravael 5.5

Je vous remercie d'avance =)

7 réponses


Pourquoi ne pas utiliser HTMLpurifier et lui demander de laisser passer les balisse que tu veut ainsi tu aura une bien meilleur sécuriter.

exemple :

//htmlpurifier
$purifierConfig = HTMLPurifier_Config::createDefault();
$purifierConfig->set('Core.Encoding', 'UTF-8');
$purifierConfig->set('HTML.Allowed', 'p, a[href|title], blockquote[cite],span[style|class], table[style], thead, tr, th[style], td[style], tbody, pre, code[class|style], hr, em, strong, ul, li, img[src|alt|class], br, ol, del, h1, h2, h3, h4, h5, h6');
$Purifier = new HTMLPurifier($purifierConfig);

Par contre il faut purifier a l'affichage et non pas a l'entré.

Soulouf
Auteur

Ha je ne savais meme pas que cela existait ! Comme quoi on apprend tous les jours ! =)
Je te remercie beaucoup !

Petite question : Est ce que tu utilises ce package https://github.com/mewebstudio/Purifier ?

Moi je l'ai pris ici http://htmlpurifier.org il en n'existe forcement d'autre mais je ne connait que celui ci, je pense que c'est le plus utiliser ?

Soulouf
Auteur

Je viens de tester mais je ne comprends pas trop comme cela fonctionne.
Est-ce que cela est possible de lui dire d'échapper automatiquement tous les contenus se trouvant dans la balise code avant de l'enregistrer dans la balise de données ?

HTMLprifier laissera passer ce qui ce trouve dans des balisse code sans que ce soit éxécuter, fais le test tu échappera toi même je te met juste des exemples.

echo $Purifier->purify(<code><script>alert('say hello');</script></code>);

tu verra que si tu a bien fais le truc il ne laissera pas passer le javascript alert()

ou encore tu peut tester ça :

echo $Purifier->purify(<code><?php header("Location:google.fr"); ?></code>);

tu peut même carément faire comme ça :

echo $Purifier->purify(<?php header("Location:google.fr"); ?>);

tu verra que le header ne sera pas executé tant que tu ne le laisse pas passer dans la configuration de HTMLpurifier :

$purifierConfig->set('HTML.Allowed', 'p, a[href|title], blockquote[cite],span[style|class], table[style], thead, tr, th[style], td[style], tbody, pre, code[class|style], hr, em, strong, ul, li, img[src|alt|class], br, ol, del, h1, h2, h3, h4, h5, h6');

Pour que le header fonctionne il faudrai autoriser le php etc... pareil pour le javascript.

Ensuite tu peut purifier a l'entré en base de donnée mai si tu utilise un parser comme le markdown tu aura des bug donc c'est pourquoi il faut purifier a l'affichage.

c'est un peut pareil que faire ça : strip_tags($content, '<p>'); ici le strip_tags ne laissera passer que le Paragraphe.

Soulouf
Auteur

Je te remercie beaucoup pour ta réponse rapide. Malheureusement j'utilise du markdown et effectivement cela n'a ne fonctionne pas trop mais j'ai trouvé justement comment mettre du code dans un bloc de code et celui ci sera automatiquement échapper par le markdown de Github (Ha depuis que je l'utilise je n'ai plus du tout de problème :D)

J'utilise aussi du markdown et ça fonction super pour moi.

Pour tout comprendre tu peut lire ce billet ou il t'explique exactement ce que je vient de t'expliqué il faut vraiment être sur de toi par-ce-que si tu utilise googlepretify par exemple ou sintaxe hightlight tu pourrai avoir des soucis.