Ejecutar código JavaScript almacenado como una cadena

Resuelto divinci asked hace 15 años • 22 respuestas

¿Cómo ejecuto algo de JavaScript que es una cadena?

function ExecuteJavascriptString()
{
    var s = "alert('hello')";
    // how do I get a browser to alert('hello')?
}
divinci avatar Jun 02 '09 19:06 divinci
Aceptado

Con la evalfunción, como:

eval("my script here");

ADVERTENCIA: Cualquier código malicioso contenido en la cadena se ejecutará con los mismos privilegios de su sitio; asegúrese absolutamente de poder confiar en la fuente.

Lennart Koopmann avatar Jun 02 '2009 12:06 Lennart Koopmann

Puedes ejecutarlo usando una función. Ejemplo:

var theInstructions = "alert('Hello World'); var x = 100";

var F=new Function (theInstructions);

return(F());
stefan avatar Mar 14 '2012 12:03 stefan

La evalfunción evaluará una cadena que se le pasa.

Pero el uso de evales súper peligroso Y lento , así que úsalo con precaución.

coobird avatar Jun 02 '2009 12:06 coobird

Para usuarios que utilizan node y que están preocupados por las implicaciones contextuales de eval()las ofertas de nodejs vm. Crea una máquina virtual V8 que puede proteger la ejecución de su código en un contexto separado.

Llevar las cosas un paso más allá es vm2lo que endurece vmal permitir que la máquina virtual ejecute código que no es de confianza.

  • https://nodejs.org/api/vm.html - Nodejs/vm oficial

  • https://github.com/patriksimek/vm2 : vm2 extendido ( a partir de julio de 2023, este paquete está obsoleto y expone una vulnerabilidad crítica )

const vm = require('vm');

const x = 1;

const sandbox = { x: 2 };
vm.createContext(sandbox); // Contextify the sandbox.

const code = 'x += 40; var y = 17;';
// `x` and `y` are global variables in the sandboxed environment.
// Initially, x has the value 2 because that is the value of sandbox.x.
vm.runInContext(code, sandbox);

console.log(sandbox.x); // 42
console.log(sandbox.y); // 17

console.log(x); // 1; y is not defined.
Eric Kigathi avatar Mar 08 '2019 02:03 Eric Kigathi