Bonjour!

J'utilise TEXTAREA pour éditeur pour insérer des textes dans une base de données.

de la forme :
 Texto: <textarea name="texto" rows="20"><?php echo $texto; ?></textarea /><br />


Et pour protéger la base de données et éviter d'avoir des codes non désirés dans la base de données, c'est le code-ci :
 $texto = mysql_real_escape_string(htmlspecialchars($_POST['texto']));


Suivi de :
 mysql_query("UPDATE texto SET texto='$texto' WHERE id='$id'")


Ma question est que "htmlspecialchars" fait la conversion de certains codes html en caractères d'affichage dans la base de données afin que celu-ci ne soit pas exécutable lors de l'affichage publique.

Le BBcode est sensé convertir des balise HTML en balise non HTML. Mais, comment je peux utiliser du BBcode si dans ma base de données j'interdit le HTML?

Si je supprime l'interdiction par "htmlspecialchars", je pourrais théoriquement utiliser TinyMCE ou un autre et avoir ainsi un éditeur plus visuel qui remplacerait TEXTAREA. Mais je n'aurais plus la protection que "htmlspecialchars" m'apporte pour protéger ma base de données.

J'ai besoin de vos idée sur le sujet. Merci.

Ce que je cherche à faire, c'est d'utiliser un système BBcode simple afin de pouvoir utiliser quelques balise pour mettre des images mais protéger du même coup ma base de données contre les balise malicieux comme le javascript.
Salut,

a écrit :
Le BBcode est sensé convertir des balise HTML en balise non HTML. Mais, comment je peux utiliser du BBcode si dans ma base de données j'interdit le HTML?


Il me semble que c'est plutôt l'inverse : si tu laisses par exemple tes visiteurs écrire des commentaires, ces derniers peuvent mettre en page leur commentaires avec du BBcode.

Par exemple, un visiteur écrit ça :

\[gras\]texte blabla[/gras]"

C'est ce qui est enregistré dans ta bdd. Quand tu affiches le commentaire, ça donne ça :

<strong>texte blabla</strong>
Oui, je crois que j'ai mal interprété.

BBcode converti en encode HTML. Ce qui fait que l'utilisateur n'a pas à écrire du HTML.

Si htmlentities() est mis à l'entrée de la base de donnée, le html est converti en code
d'affichage et non exécutable.

Si htmlentities() est mis à la sortie (pas dans la base de donnée), le code html est dans
la base de donnée mais il sera interprété comme une lecture quand même.

Si je veux un résulat en html après avoir utilisé du BBcode, je dois supprimer htmlentities()
de mon codage.

Il me reste plus qu'à mettre une condition "expression régulière" pour supprimer ce qui
commence par <script pour éviter les XSS à la sortie de la base de données (lors de
l'affichage).

Les éditeurs Wysiwyg en javascript supprime une partie de balises et les remets.. je tente
de savoir comment il font pour faire afficher du html à la fin.



...

Par exemple, un visiteur écrit ça :

\[gras\]texte blabla[/gras]&quot;

C'est ce qui est enregistré dans ta bdd. Quand tu affiches le commentaire, ça donne ça :

&lt;strong&gt;texte blabla&lt;/strong&gt;
Salut,
Je pense qu'il faudrait utiliser les expressions régulières (ou une fonction de remplacement de chaine) pour transformer le bbcode en balise html juste avant la sortie (affichage). De cette façon tu peux conserver htmlentities, tu stockes dans la bdd avec le bbcode et tu ne transformes que les balises bbcode autorisées à l'affichage (gras, italique... mais pas script par ex).

Après j'ai jamais dév de bbcode mais ça me parait logique de faire comme ça.
D'autres pourront certainement t'en dire + que moi.
Bon courage !
oliviadox a écrit :
Salut,
Je pense qu'il faudrait utiliser les expressions régulières (ou une fonction de remplacement de chaine) pour transformer le bbcode en balise html juste avant la sortie (affichage). De cette façon tu peux conserver htmlentities, tu stockes dans la bdd avec le bbcode et tu ne transformes que les balises bbcode autorisées à l'affichage (gras, italique... mais pas script par ex).

Après j'ai jamais dév de bbcode mais ça me parait logique de faire comme ça.
D'autres pourront certainement t'en dire + que moi.
Bon courage !