Sie könnten auch verwenden eval()
, JSON.parse()
ist aber sicherer und einfacher. Warum sollten Sie das tun?
gut und funktioniert
var yourJsonObject = JSON.parse(json_as_text);
Ich sehe keinen Grund, warum Sie es vorziehen würden, zu verwenden eval
. Dies gefährdet nur Ihre Anwendung.
Das heißt - das ist auch möglich.
schlecht - funktioniert aber auch
var yourJsonObject = eval(json_as_text);
Warum ist eval
eine schlechte Idee?
Betrachten Sie das folgende Beispiel.
Einige Drittanbieter oder Benutzer haben JSON-Zeichenfolgendaten bereitgestellt.
var json = `
[{
"adjacencies": [
{
"nodeTo": function(){
return "delete server files - you have been hacked!";
}(),
"nodeFrom": "graphnode1",
"data": {
"$color": "#557EAA"
}
}
],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode1",
"name": "graphnode1"
},{
"adjacencies": [],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode2",
"name": "graphnode2"
}]
`;
Ihr serverseitiges Skript verarbeitet diese Daten.
Verwenden von JSON.parse
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = JSON.parse(json)[0].adjacencies[0].nodeTo;
}
wird werfen:
Uncaught SyntaxError: Unexpected token u in JSON at position X.
Funktion wird nicht ausgeführt.
Du bist sicher.
Verwenden von eval()
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = eval(json)[0].adjacencies[0].nodeTo;
}
führt die Funktion aus und gibt den Text zurück.
Wenn ich diese harmlose Funktion durch eine ersetze, die Dateien aus Ihrem Website-Ordner entfernt, wurden Sie gehackt. In diesem Beispiel werden keine Fehler / Warnungen ausgegeben.
Du bist NICHT sicher.
Ich konnte eine JSON-Textzeichenfolge so bearbeiten, dass sie als Funktion fungiert, die auf dem Server ausgeführt wird.
eval(JSON)[0].adjacencies[0].nodeTo
erwartet, eine JSON-Zeichenfolge zu verarbeiten, aber in Wirklichkeit haben wir gerade eine Funktion auf unserem Server ausgeführt.
Dies könnte auch verhindert werden, wenn wir alle vom Benutzer bereitgestellten Daten serverseitig überprüfen, bevor wir sie an eine eval()
Funktion übergeben. Warum jedoch nicht einfach das integrierte Tool zum Parsen von JSON verwenden und all diese Probleme und Gefahren vermeiden?