Ответ 1
Ну, у вас есть переменная module
в node
. Таким образом, вы можете потребовать пакет vm
и запустить код с помощью метода require
:
var vm = module.require('vm');
vm.runInThisContext(' console.log("hello") ');
UPD Ну, вы обновили вопрос, но мы можем снова взломать его:
var vm = module.constructor.prototype.require('vm');
vm.runInThisContext(' console.log("hello") ');
UPD2 Другой вариант:
var vm = module.constructor._load('vm');
vm.runInThisContext(' console.log("hello") ');
UPD3 Снова условия меняются, поэтому следующий вариант:
module.constructor.prototype._compile(' console.log("again hacked") ');
// or
module.__proto__._compile(' console.log("again hacked") ');
// or
Object.getPrototypeOf(module)._compile(' console.log("again hacked") ');
Я думаю, лучше установить module = undefined
, чтобы сделать вопрос более сложным:)
UPD4
Существует еще один вариант без module
:)
process.stdin.push(' console.log("here we are") \n ');
Но он работает только в CLI ( "repl" )
UPD5
Также в iojs
и в node
с версией >= 0.11.x вы можете использовать привязку contextify
:
var contextify = process.binding('contextify');
var script = new contextify.ContextifyScript(' console.log("im here, buddy") ');
script.runInThisContext();
В node
с версией < 0.11.x вы можете использовать привязку evals
:
var evals = process.binding('evals');
var script = new evals.NodeScript(' console.log("here I am") ')
script.runInThisContext();