Ejecutar código JavaScript almacenado como una cadena
¿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')?
}
Con la eval
funció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.
Puedes ejecutarlo usando una función. Ejemplo:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
La eval
función evaluará una cadena que se le pasa.
Pero el uso de eval
es súper peligroso Y lento , así que úsalo con precaución.
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 vm2
lo que endurece vm
al 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.