Чистая Песочница Javascript

Это возможное решение для чистой песочницы javascript? Я хочу выполнить ненадежную строку кода, не предоставляя доступ к DOM, окну, этому и т. Д., Но предоставляя пользователю доступ к Math, JSON и другим функциям. Я проверил это на Chrome.

ОБНОВЛЕНИЕ: Я хочу дать возможность сохранить на сервере пользовательский код и сделать его доступным для других пользователей. Я ищу способ запретить доступ к документу и сделать его безопасным.

function safe(code,args)
{
    if (!args)
        args=[];
    return (function(){
      for (i in window) 
        eval("var "+i+";");
      return function(){return eval(code);}.apply(0,args);
    })();
}



ff=function()
{
    return 3.14;
}

console.log(safe("this;"));//Number
console.log(safe("window;"));//undefined
console.log(safe("console;"));//undefined
console.log(safe("Math;"));//MathConstructor
console.log(safe("JSON;"));//JSON
console.log(safe("Element;"));//undefined
console.log(safe("document;"));//undefined
console.log(safe("Math.cos(arguments[0]);",[3.14]));//-0.9999987317275395
console.log(safe("arguments[0]();",[ff]));//3.14

Я предложил это на старом посте: /questions/17450801/est-li-sposob-zaklyuchit-v-tyurmu-v-javascript-tak-chto-dom-ne-viden/17450810#17450810

Спасибо!

1 ответ

Решение

Это небезопасно. Следующая конструкция получит глобальный window объект из вашей песочницы:

(function(){return this;})()

В этот момент вы можете извлечь из него все, что захотите, включая такие как document,

Шляпа для TJ Crowder за ответ на /questions/17450801/est-li-sposob-zaklyuchit-v-tyurmu-v-javascript-tak-chto-dom-ne-viden/17450806#17450806 в котором он описал этот эксплойт.

Другие вопросы по тегам