También podría usar, eval()
pero JSON.parse()
es una forma más segura y fácil, entonces ¿por qué lo haría?
bueno y funciona
var yourJsonObject = JSON.parse(json_as_text);
No veo ninguna razón por la que preferiría usar eval
. Solo pone su aplicación en riesgo.
Dicho esto, esto también es posible.
malo, pero también funciona
var yourJsonObject = eval(json_as_text);
¿Por qué es eval
una mala idea?
Considere el siguiente ejemplo.
Algunos terceros o usuarios proporcionaron datos de cadena JSON.
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"
}]
`;
Su script del lado del servidor procesa esos datos.
Utilizando JSON.parse
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = JSON.parse(json)[0].adjacencies[0].nodeTo;
}
arrojará:
Uncaught SyntaxError: Unexpected token u in JSON at position X.
La función no se ejecutará.
Estás seguro.
Utilizando eval()
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = eval(json)[0].adjacencies[0].nodeTo;
}
ejecutará la función y devolverá el texto.
Si reemplazo esa función inofensiva con una que elimina archivos de la carpeta de su sitio web, ha sido pirateado. No se arrojarán errores / advertencias en este ejemplo.
NO estás a salvo.
Pude manipular una cadena de texto JSON para que actúe como una función que se ejecutará en el servidor.
eval(JSON)[0].adjacencies[0].nodeTo
espera procesar una cadena JSON pero, en realidad, acabamos de ejecutar una función en nuestro servidor.
Esto también podría evitarse si verificamos en el servidor todos los datos proporcionados por el usuario antes de pasarlos a una eval()
función, pero ¿por qué no usar la herramienta integrada para analizar JSON y evitar todos estos problemas y peligros?