Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/09/2011, à 21:51

debutant_ubuntu

htmlspecialchars

Bonjour,

J'ai créé un formulaire pour permettre aux utilisateurs du site que je suis en train de créer de me transmettre des données.
Pour éviter d'exécuter du code html, j'utilise la fonction htmlspecialchars.
Le problème est que si l'utilisateur veut réellement me transmettre le caractère &, celui-ci ne pourra pas être affiché car il apparaîtra &.
J'imagine que mon problème doit avoir une solution simple, mais je ne m'en sors pas. Je tourne en rond...
Je vous remercie par avance pour votre aide!

Hors ligne

#2 Le 24/09/2011, à 22:17

le hollandais volant

Re : htmlspecialchars

Salut !

Et si tu fais ça ? Pour remplacer les "&" par des "&".

$variable = str_replace('#&#', '&', $variable)

Si la page affiche un « & », c'est que le code HTML contient ceci : « & » (le premier s'affichant comme un "&").
Donc quoi qu'il en soit, il sera toujours échappé.

Dernière modification par le hollandais volant (Le 24/09/2011, à 22:18)

Hors ligne

#3 Le 26/09/2011, à 11:21

debutant_ubuntu

Re : htmlspecialchars

En fait, j'utilise la fonction htmlspecialchars pour éviter d'exécuter du code html envoyé par l'utilisateur. Si j'utilise un code qui reconverti & en &, alors je risque à nouveau d'exécuter du html là où je n'en veux pas.
Y-a-t-il une erreur dans mon raisonnement?
Comment fait-on dans les divers forums, livre d'or, etc pour afficher le caractére "&"?

Hors ligne

#4 Le 26/09/2011, à 16:35

le hollandais volant

Re : htmlspecialchars

Justement : si tu regardes dans le code source, normalement tu verra un "&" là où à l'écran on voit un "&".

Donc si à l'écran on voit un "&", c'est que dans le code source, on doit avoir un "&". Tu me suis ?
En fait c'est simplement récursif, puisque le "&" est lui même contenu dans son code html.

Le code que j'ai proposé ne convertit pas les "&" en "&", mais les "&" en "&". Effectivement il y'a le premier amp; qui est tranformé, mais le second reste là.
Si le second n'était pas là, en aucun cas, les & ne sont transformés en "&".

Par exemple, si tu as ça : "é", ça restera comme ça.

Hors ligne

#5 Le 26/09/2011, à 17:50

debutant_ubuntu

Re : htmlspecialchars

Merci beaucoup pour ton aide!

En fait, mon but est de me protéger vis-à-vis de la faille XSS tout en permettant à l'utilisateur d'écrire le caractère &.
Je comprends le code que tu me proposes. Si il y a 2 fois amp;, c'est parce que j'utilise deux fois la fonctions htmlspecialchars (probablement une fois pour rien...). Comme tu le dis, c'est récursif.
Ma problématique est la suivante. J'utilise la fonction htmlspecialchars pour transformer les & en &. Si j'utilise une fonction pour transformer les & (ou les & puisque mon code utilise deux fois la fonction htmlspecialchars) en &, mon code sera-t-il robuste vis-à-vis de la faille XSS?
Je ne le pense pas. Tu me le confirmes? Auquel cas, comment afficher les & tout en se protégeant de la faille XSS?

Tu vois, je tourne en rond...

Hors ligne

#6 Le 26/09/2011, à 18:15

Jules Petibidon

Re : htmlspecialchars

La question est de savoir pourquoi tu utilises deux fois cette fonction ?

Hors ligne

#7 Le 27/09/2011, à 14:07

le hollandais volant

Re : htmlspecialchars

Jules Petibidon a écrit :

La question est de savoir pourquoi tu utilises deux fois cette fonction ?

Oui : pourquoi ?

De toute façon, quand un de tes visiteurs tapes "&" dans le formulaire, alors il sera transformé en & et il s'affichera comme un « & » dans le commentaire.

Une fois suffit amplement. Je ne saisi plus quel est ton soucis là.

Hors ligne