2011-01-31 20 views
6

está allí?¿ejecutas un código de JavaScript dentro de un objeto json?

así que algo como:

{ key1 : "val1", key2: "val2", some_code: "document.getElementById("someid").innerHTML='test';" } 

Así some_code serían ejecutados sin intervención del usuario?

+0

Como abajo, sí podría. Sin embargo, es mejor evitarlo. Si le proporciona esto a un tercero, debe bloquearse. –

Respuesta

2

Es posible hacer eso, sí, por ejemplo, al hacer esto:

{ 
    "functionName": function() { 
    alert('Hello!'); 
    }() 
} 

Sin embargo, eso no puede ser válida JSON más. JSON no acepta funciones.

+0

hmm - un poco difícil de construir y pasar esa estructura de un servidor de back-end al navegador del cliente ¿eh? –

3

Esto ya no sería JSON. Pero se puede procesar posteriormente el JSON analizada:

json.some_code = eval(json.some_code); 

Sin embargo, esto puede ser peligroso (inyección de scripts, etc.).

Por lo tanto, si se puede, debe hacerse lo siguiente:

json = { key1 : "val1", key2: "val2", elem: "someid", html:"test" }; 
document.getElementById(json.elem).innerHTML=json.html; 
0

Bueno, primero que necesita para escapar de las comillas dobles: (. O utilice comillas simples)

{ key1 : "val1", key2: "val2", some_code: "document.getElementById(\"someid\").innerHTML='test';" } 

Si desea evaluar el campo some_code como una secuencia de comandos, es tan simple como pasarlo a eval:

eval(obj.some_code); 

Esto es, por supuesto, muy peligroso a menos que tenga un control absoluto sobre los contenidos de some_code.

2

En primer lugar, su ejemplo no es válido JSON. Pruébelo en JSON validator.

En segundo lugar, JSON es un estándar de intercambio de datos y cuando se analiza correctamente, no se ejecutará ningún texto que contenga algún código.

Leer en JSON security issues.

Regla de oro: no use la función JavaScript eval, use un analizador ya preparado como el JSON evaluator de Douglas Crockford.

+0

bien gracias chicos - creo que id, por lo general, se adhieren a eso - json como datos y no hay forma posible de "auto-ejecutar" un objeto json. –

Cuestiones relacionadas