Задача: сделать так, чтобы некий исполняющийся на сервере через eval() (или через конструктор функции, неважно) код никаким образом не мог получить доступ к объекту global и require.
Простое решение:
function runCode(code) {
var global, require;
eval(code);
}
// evaled code:
console.log(global); // -> undefined
Обход решения:
// evaled code:
var global = eval("(new ('hello'.constructor.constructor)('return global;'))()");
console.log(global); // !!!
Вопрос: как более надежно скрыть global, чтобы этот обход не работал?