[RESOLU] Empêcher l'insertion de balise html, php, javascript

Eléphant du PHP | 386 Messages

30 sept. 2014, 13:36

Bonjour,

J'ai testé l'inscription en ajoutant un prénom avec des chevrons : <monprenom>
Et j'aimerais qu'à l'insertion, ces balises soient supprimées, pareils pour les caractères spéciaux = + / * - ? ! ) ( # { } [ ] & % $ ; : , \ /
Je précise que j'utilise PDO et des requêtes préparées, mais ça change rien au problème.
je mets htmlspecialchars à l'affichage et j'ai <monprenom> à l'affichage avec les chevrons :?

Merci d'avance

ynx
Mammouth du PHP | 586 Messages

30 sept. 2014, 16:29

Salut,

Je précise que j'utilise PDO et des requêtes préparées, mais ça change rien au problème.

C'est normal puisque ce n'est pas un problème. On peut enregistrer des balises html en base de données sans aucun soucis (par exemple pour les messages de ce forum).
L'important est de bien utiliser htmlentities pour l'affichage afin que les balises html soit remplacées par les entités correspondantes : tu vois <monprenom> mais si tu regarde le code source de la page tu devrais voir <monprenom>
Ainsi tu es protégé contre les failles XSS et tu peux accepter tous les caractères possibles.
htmlentities avant l'insertion en bdd -> mauvaise pratique
htmlentities lors de l'affichage dans un document html -> bonne pratique

Si tu souhaites tout de même interdire certains caractères pour le pseudo, tu peux te tourner vers la fonction filter_var avec le filtre correspondant à tes besoins ou utiliser une expression régulière.

Bonne journée

Eléphant du PHP | 386 Messages

30 sept. 2014, 19:56

C'est résolu, j'utilise preg_match pour chaque champs qui n'acceptent pas de caractères spéciaux : nom, prénom, pseudo (le mot de passe étant crypté en SHA1, accepte tous les caractères spéciaux)