Песочница Javascript

Я хочу, чтобы разработчики написали несколько пользовательских приложений для сайта на Javascript, но я хочу поместить его в песочницу, чтобы они не могли делать ничего непослушного, например, перенаправлять пользователя, устанавливать отображение тела на none и т. д. У меня есть пространство имен в Javascript, где все функции, которые им когда-либо понадобятся, существуют там, поэтому я подумал, что создание песочницы будет вопросом:

with(Namespace) {
    //App code goes here where they can only access Namespace.*
}

Как это легко обойти и какие еще способы можно сделать? Лучше не модерировать каждое представленное приложение.


person Louis    schedule 07.06.2010    source источник


Ответы (3)


Чтобы применить песочницу, вам нужно будет проверить код перед его выполнением, захватить любой нелегальный код и, если он будет обнаружен, каким-то образом предотвратить его запуск. Очень утомительно и склонен к ошибкам в течение длительного времени.

Facebook делал это по крайней мере на своей ранней платформе, мне, как разработчику, это точно не нравилось. Они ограничивали нативные методы, которые можно было использовать, и предоставляли ограниченные оболочки для некоторых из них.

person Lauri Lehtinen    schedule 07.06.2010
comment
На самом деле, невозможно написать такой инспектор кода, потому что он может свести к решению проблемы остановки ;) (подумайте о том, чтобы построить s каким-то странным образом и вызвать window[s]()) - person mik01aj; 28.03.2014

Что ж, варианты кода песочницы на данный момент таковы:

Оба позволяют создать безопасную среду, в которой доступ к глобальному объекту и модели DOM ограничен.

Основная цель этих проектов — позволить вам безопасно встраивать виджеты и любой веб-контент от третьих лиц.

person Christian C. Salvadó    schedule 07.06.2010
comment
Это также мешает им изменять Object.prototype? - person mik01aj; 28.03.2014

Первое, что приходит на ум, это eval. Они могут использовать это для выполнения пользовательского кода за пределами изолированной программной среды оболочки. Будет очень трудно остановить решительного разработчика, пытаясь обернуть код.

Ссылка на использование eval.

person kemiller2002    schedule 07.06.2010
comment
Google Caja и ADSafe могут ограничивать eval :-) - person Christian C. Salvadó; 07.06.2010