My Spider Sense m'avertit que l'utilisation eval()
pour analyser le JSON entrant est une mauvaise idée. Je me demande simplement si JSON.parse()
- ce qui, je suppose, fait partie de JavaScript et non d'une fonction spécifique au navigateur - est plus sécurisé.
javascript
json
Kevin Major
la source
la source
JSON.parse
est plus rapide queeval
, au moins en V8 (moteur JS de Chromium). Source .Réponses:
Vous êtes plus vulnérable aux attaques si vous utilisez
eval
: JSON est un sous-ensemble de Javascript et json.parse analyse simplement JSON alors queeval
cela laisserait la porte ouverte à toutes les expressions JS.la source
eval('alert(1)');
.Toutes les
JSON.parse
implémentations utilisent probablementeval()
JSON.parse
est basé sur la solution de Douglas Crockford , qui utiliseeval()
directement la ligne 497 .L'avantage de
JSON.parse
est qu'il vérifie que l'argument est la syntaxe JSON correcte.la source
JSON.parse()
dans Firefox 28 et Chromium 33 sur mon système Linux Mint. C'était 2x plus rapide queeval()
dans Firefox et 4x plus rapide dans Chromium. Je ne sais pas quel code source vous publiez, mais ce n'est pas la même chose dans mes navigateurs.JSON.parse()
implémentation native qui est plus sûre et plus rapide que leseval()
analyseurs basés sur.Tous les navigateurs n'ont pas de support JSON natif, il y aura donc des moments où vous devrez utiliser
eval()
la chaîne JSON. Utilisez l'analyseur JSON de http://json.org car cela gère tout beaucoup plus facilement pour vous.Eval()
c'est un mal mais contre certains navigateurs c'est un mal nécessaire mais là où vous pouvez l'éviter, faites-le !!!!!la source
Il y a une différence entre ce que JSON.parse () et eval () accepteront. Essayez eval sur ceci:
var x = "{\" shoppingCartName \ ": \" shopping_cart: 2000 \ "}"
Voyez cet exemple .
la source
Si vous analysez le JSON avec
eval
, vous autorisez la chaîne en cours d'analyse à contenir absolument n'importe quoi, donc au lieu d'être simplement un ensemble de données, vous pourriez vous retrouver à exécuter des appels de fonction, ou autre.De plus, JSON
parse
accepte un paramètre supplémentaire, reviver, qui vous permet de spécifier comment traiter certaines valeurs, telles que les dates-heures (plus d'informations et d'exemples dans la documentation en ligne ici )la source
JSON n'est qu'un sous-ensemble de JavaScript. Mais
eval
évalue le langage JavaScript complet et pas seulement le sous-ensemble qui est JSON.la source
JSON.parse
(directement implémentée dans le moteur JavaScript) analyse uniquement JSON. Mais d'autres implémentations non natives utilisent des vérifications de cohérence, puis les utilisenteval
pour des raisons de performances.