JeuWeb - Crée ton jeu par navigateur
comment encodez-vous vos objets JSON ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : comment encodez-vous vos objets JSON ? (/showthread.php?tid=5209)



comment encodez-vous vos objets JSON ? - php_addict - 01-02-2011

bonjour

je viens bêtement de m'apercevoir que la fonction json_encode ne protège pas contre les failles XSS

j'ai bien essayé avec le paramètre optionnel json_encode($a,JSON_HEX_TAG) mais j'ai une notificaion d'erreur, mon install de wamp ne reconnais pas la valeur JSON_HEX_TAG


j'en viens donc à vous demander comment encodez vous vos variables issues d'objets JSON pour l'affichage en HTML afin de convertir les caractères spéciaux HTML? un simple htmlspecialchars ?

bonne journée


RE: comment encodez-vous vos objets JSON ? - Holy - 01-02-2011

Il y a une petite confusion il me semble. Json_encode() permet de sérialiser un tableau en une chaine qui est dépliable via json_decode() pour retrouver le tableau initial (sous forme de tableau ou d'objet). Il n'y a aucune raison que json_encode() protège contre les failles XSS, c'est tout simplement pas son rôle.

Si tu as déjà un tableau sérialisé dans ta base de données, il te suffit de faire json_decode(), de récupérer tes données et si tu l'affiches dans en sortie (html par exemple), tu fais un htmlspecialchars() dessus.

A l'encodage, on ne modifie jamais les données parce que si pour une raison ou une autre tu as besoin de ces données dans un autre contexte, tu vas devoir les remodifier pour qu'elles soient facilement exploitables. Donc pour répondre à ta question : la solution est la même que pour toute variable utilisateur en sortie, tu fous un htmlspecialchars() dessus Wink


RE: comment encodez-vous vos objets JSON ? - Sephi-Chan - 01-02-2011

Sans mauvais jeu de mot, je pense que quelque chose t'échappe (…).
Pose-toi cette question : Pourquoi encoder les caractères spéciaux de XML lors d'une sérialisation en JSON ?


Sephi-Chan


RE: comment encodez-vous vos objets JSON ? - php_addict - 01-02-2011

oh la honte...désolé je n'avait pas compris le sens premier de cette fonction...je l'utilisait pour l'échapement des variables de l'objet JSON

(01-02-2011, 05:52 PM)Sephi-Chan a écrit : Sans mauvais jeu de mot, je pense que quelque chose t'échappe (…).
Pose-toi cette question : Pourquoi encoder les caractères spéciaux de XML lors d'une sérialisation en JSON ?

ok, j'ai compris, je suis un peu lourds en ce moment avec mes question débiles...

merci à vous


RE: comment encodez-vous vos objets JSON ? - Sephi-Chan - 01-02-2011

Mais non c'est rien.
Mais du coup, c'est quoi ta réponse ? :p


Sephi-Chan


RE: comment encodez-vous vos objets JSON ? - php_addict - 01-02-2011

(01-02-2011, 09:21 PM)Sephi-Chan a écrit : Mais non c'est rien.
Mais du coup, c'est quoi ta réponse ? :p

inutile d'encoder quoi que ce soit Wink : je veux dire: ne pas transformer les données mais juste au moment de l'affichage, je crois que j'ai retenu la leçon...

je me fait un array() en php puis je passe l'array dans json_encode qui se charge de l'échappement comme un grand

mon objet JSON est les données de ma carte à afficher (avec AJAX ou sans et c'est là où c'est bien pratique)

si ce n'était que pour le stocker en base de donnée je n'encoderais pas les caractères spéciaux HTML mais là comme ce n'est que destiner à de l'affichage soit avec des echo en php soit en javascript (AJAX) j'hésites sur "où je vais utiliser hmlspecialchars"

il serait logique d'utiliser hmlspecialchars juste avant l'affichage, donc en php pas de soucis mais en JS faudrait que je me fasse une fonction rien que pour ca...


RE: comment encodez-vous vos objets JSON ? - Sephi-Chan - 01-02-2011

Si tu utilises jQuery, pas mal de choses sont faîtes automatiquement. Par exemple la méthode text(content) échappe le contenu injecté (à la différence de html(content).


Sephi-Chan


RE: comment encodez-vous vos objets JSON ? - php_addict - 02-02-2011

oui merci. effectivement j'utilise Jquery, je ne connaissais pas text()


RE: comment encodez-vous vos objets JSON ? - Ter Rowan - 02-02-2011

a ce propos, concernant jquery en particulier (mais pas seulement), est ce qu'il n'y aurait pas un volontaire pour faire un article du type "cas développeur standard"

exemples :

je veux afficher du code html sécurisé (exemple carte) envoyé à la page par ajax je fais ...
je veux afficher du texte (exemple message d'un joueur) envoyé à la page par ajax je fais ...

etc...

ça pourrait être sympa Smile


RE: comment encodez-vous vos objets JSON ? - srm - 02-02-2011

En effet il n'y a pas de volontaire Smile