Я создаю приложение, в котором сгенерированные пользователем функции javascript хранятся в базе данных и, в свою очередь, передаются ряду других пользователей.
Сценарии должны быть проверены лицом с правами администратора (который должен быть доверяемым - но они выбираются самими пользователями, и поэтому своего рода проверка представляется необходимой)
Функции, которые будут выполняться, являются первичными только для целей расчета - доступ к DOM или (по крайней мере, на данный момент) никаких глобальных объектов не требуется.
Допустим, пользователь определяет функцию, считающую слова строки (в качестве простого примера).
Мой подход на данный момент заключается в том, чтобы обернуть функцию в замыкание, передать объект с входными свойствами и определить локальное окно var внутри него, чтобы сделать этот глобальный объект недоступным (очевидно, этого недостаточно - перебирая все свойства объекта окна и определение их локально может быть возможным, но в свою очередь может нарушить некоторые важные функции, и этого будет недостаточно)
Следующая идея заключалась в том, чтобы на лету обернуть функцию в вызов ADsave, чтобы предотвратить функциональность, которая может быть вредной (и доступ к глобальной области видимости), но для этого потребуется проверка кода с помощью опции JSLint / adsave на the-fly (и я просто не могу найти какой-либо материал о том, как это сделать ...!)
Следующий подход - использовать что-то вроде Caja (что фактически исключает возможность легкого добавления новых функций, так как код javascript должен быть «преобразован» в версию кода Caja (и это не может быть сделано моим собственное приложение на лету).
Поскольку мне придется проверять функции всякий раз, когда они возвращаются с сервера (а не только тогда, когда они были созданы на клиенте), ADsave, похоже, пока является лучшим решением
Есть ли у кого-нибудь решение упомянутых выше проблем (или, возможно, лучшее решение - я имею в виду, что выполнение стороннего jscript (обслуживаемого из некоторой БД) безопасным способом должно быть довольно распространенной задачей в наше время.