Est de désinfection JSON nécessaire?
Je pense que c'est une bonne pratique bien connue sur le web de méfiance à l'égard de l'entrée. La phrase
"Toute entrée est mal."
est probablement le plus cité citation à l'égard de validation de l'entrée. Maintenant, pour le HTML, vous pouvez utiliser des outils tels que DOMPurify à désinfecter.
Ma question est, si j'ai un Node.js serveur exécutant Express et corps de l'analyseur middleware pour recevoir et d'analyser JSON, ai-je besoin pour exécuter toute la désinfection ainsi?
Mon (peut-être naïf?) pensées sur ce sont que JSON est seulement les données, pas de code, et si quelqu'un envoie invalid JSON, corps-analyseur (qui utilise JSON.parse()
en interne) ne pourra pas de toute façon, je sais que mon application sera un objet JavaScript. Tant que je n'ai pas l'exécuter eval sur qui ou appeler une fonction, je doit être fine, ne devrais-je pas?
Suis-je raté quelque chose?
OriginalL'auteur Golo Roden | 2014-09-22
Vous devez vous connecter pour publier un commentaire.
Depuis
JSON.parse()
ne pas exécuter n'importe quel code dans les données pour être analysé, de sorte qu'il n'est pas vulnérable à la manièreeval()
est, mais il ya encore des choses que vous devriez faire pour protéger l'intégrité de votre serveur et des applications telles que:JSON.parse()
peut lever une exception.Donc, pour répondre directement à votre question, "oui" il n'y a plus à faire que de simplement à l'aide du corps de l'analyseur même s'il est parfaitement bien de première ligne pour le premier traitement des données. Les prochaines étapes pour ce que vous faites avec les données une fois que vous obtenez à partir de corps-analyseur de la matière dans de nombreux cas, et peut besoin de plus d'attention.
Comme un exemple, voici une fonction d'analyse syntaxique qui attend un objet avec des propriétés qui s'applique certaines de ces vérifications et vous donne un résultat filtré qui ne contient que les propriétés que vous attendiez:
OriginalL'auteur jfriend00
Vous devriez être bien. Les premiers utilisateurs de JSON souvent appel à eval() sur la chaîne reçue, ce qui est évidemment un énorme trou de sécurité. Mais JSON.analyser, comme vous le dites, s'occupe de la plupart de ces types de vérifications.
Aussi longtemps que vous vous assurez de ne pas prendre quelque chose hors de réception d'un objet JSON et passer directement dans une requête sql, par exemple, vous devriez être bien.
OriginalL'auteur Chris Tavares
Aussi longtemps que vous utilisez
JSON.parse
pas de code seront évaluésVous devez toujours en liste blanche toute clé:valeur des paires que vous voulez accepter de le résultat de l'analyse si
JSON.parse
(comme Crockford json2.js) n'utilisezeval
.Merci pour la mention, mais la solution est simple: ne pas l'utiliser.
en outre, cette question est plus précisément sur le code qui utilise la réelle
JSON.parse()
dans node.js. Il n'y a pas polyfills en cause ici.OriginalL'auteur user633183