2017-04-11 1 views
0

Je passais en revue les effets néfastes de l'utilisation d'eval() par rapport aux attaques basées sur XSS. Il y a un morceau de code que j'ai besoin de protéger contre une éventuelle attaque XSS, et ce que j'imagine que JSON.parse() devrait fonctionner correctement.Convertir eval() en JSON.parse

var request = new XMLHttpRequest(); 
var url = encDataPath + "/jcr:content/metadata.json?_charset_=utf-8"; 
url = Granite.HTTP.externalize(url); 
request.open("GET", url ,false); 
request.send(null); 

var jsonData =eval("(" + request.responseText + ")"); // <-- here 
var assetTitle = jsonData["dc:title"]; 
var mimetype = jsonData["dc:format"]; 

Quelqu'un peut-il conseiller comment puis-je changer le eval() (pour jsonData) à JSON.parse?

+1

Cette question semble répondre pour elle-même ...? – Liam

+0

Je ne comprends pas pourquoi demandez-vous comment remplacer une chose par une autre quand il semble presque trop évident et la réponse ci-dessous. Et pourquoi est-il étiqueté sous [xss] et [injection de code]? Wierd. –

Répondre

4

Il suffit de remplacer cette ligne avec:

var jsonData = JSON.parse(request.responseText); 

a fourni la réponse est correcte JSON, cela devrait fonctionner.

1

Si l'on suppose que la réponse est de remplacer tout simplement bien comportés JSON, vous seriez en mesure de la ligne de eval avec:

var jsonData = JSON.parse(request.responseText); 

Attention cependant: l'analyseur de JSON est très restrictive dans les valeurs qu'elle acceptera, comparé aux objets Javascript qu'eval accepterait. Par exemple,

var jsVal = eval("({a:3})"); 

se traduira par l'objet {a: 3}, alors que

var jsonVal = JSON.parse("{a:3}"); 

se traduira par une erreur d'analyse car la spécification JSON [0] requiert des clés de l'objet à fournir que le double Si le serveur est correctement configuré, il générera généralement un fichier JSON conforme, mais il doit en tenir compte.

[0] http://www.json.org/

+0

Regardez l'url: '/ jcr: content/metadata.json'. Je pense que c'est un pari assez sûr que la réponse est valide JSON. – Cerbrus