Защита SSJS от непроверенного кода
Я хочу использовать node.js (или другое решение SSJS), запустив собственный код + внешний письменный код внутри (недоверенный).
Любой способ отделить и защитить мой собственный код? Могу ли я ограничить влияние модулей и системы на ненадежный код (ограничить доступ к файлам, не HTTP-портам и т. Д.)?
3 ответа
Проверьте это из документации по node.js
script.runInNewContext([песочница])
Аналогичен Script.runInNewContext (примечание заглавная 'S'), но теперь является методом предварительно скомпилированного объекта Script. script.runInNewContext запускает код скрипта с песочницей в качестве глобального объекта и возвращает результат. Запущенный код не имеет доступа к локальной области. песочница не обязательна.
Вы можете проверить этот проект, он кажется очень многообещающим:
http://github.com/gf3/node-sandbox
Лично я не использую Node для произвольного выполнения SSJS. Возможно, вам не понравится это решение, но оно работало для меня около года:
Существует реализация Perl API Spidermonkey (Spidermonkey - это движок Firefox JS), которая доступна. Я подключил это с помощью некоторого CGI. В нем вы можете указать, какие именно функции вы хотите предоставить (предоставлено, это на Perl...blech) и выполнить любой код, какой пожелаете. Нет риска уязвимостей, так как вся установка полностью изолирована. Это не имитирует DOM.
Я реализовал это на своем сервере (для предотвращения злоупотреблений), выпуская токены, которые предоставляли одноразовый доступ через REST API на другом сервере. Это простая реализация HMAC, которая включает временную метку для обеспечения легитимности токена. Когда сценарий Perl получает запрос, он проверяет токен и обрабатывает сценарий (сценарий должен быть просто частью запроса POST). Затем скрипт Perl просто записывает результаты. Мой сервер настроен на тайм-аут около 10 секунд.
Надеюсь это поможет!
Посмотрите на Каху. Он переводит сторонний код в форму, в которой код имеет доступ только к тем объектам, которые вы ему явно предоставили.