Защита SSJS от непроверенного кода - PullRequest
5 голосов
/ 23 июля 2010

Я хочу использовать node.js (или другое решение SSJS), выполняя свой собственный код + внешний письменный код внутри (ненадежный).

Любой способ отделить и защитить свой собственный код?Могу ли я ограничить модули и системный эффект от ненадежного кода (ограничить доступ к файлам, не HTTP-портам и т. Д.)?

Ответы [ 3 ]

1 голос
/ 13 ноября 2010

Проверьте это в документации к node.js

script.runInNewContext ([песочница])

Похож на Script.runInNewContext (примечание заглавная 'S'), но теперьбудучи методом предварительно скомпилированного объекта Script.script.runInNewContext запускает код скрипта с песочницей в качестве глобального объекта и возвращает результат.Запущенный код не имеет доступа к локальной области.песочница не обязательна.

http://nodejs.org/api.html#script-runinnewcontext-105

1 голос
/ 23 июля 2010

Вы можете проверить этот проект, он выглядит очень перспективным:

http://github.com/gf3/node-sandbox

Лично я не использую Node для произвольного выполнения SSJS. Возможно, вам не понравится это решение, но оно работало у меня около года:

Существует Perl-реализация API-интерфейса Spidermonkey (Spidermonkey - это движок Firefox для JS) , который доступен . Я подключил это с помощью некоторого CGI. Вы можете указать в нем, какие именно функции вы хотите предоставить (предоставлено, это на Perl ... blech) и выполнить любой код, какой пожелаете. Нет риска уязвимостей, так как вся установка полностью изолирована. Он не моделирует DOM.

Способ, которым я реализовал это на своем сервере (для предотвращения злоупотреблений), заключался в том, чтобы выдавать токены, которые предоставляли одноразовый доступ через API REST на другом сервере. Это простая реализация HMAC, которая включает временную метку для обеспечения легитимности токена. Когда сценарий Perl получает запрос, он проверяет токен и обрабатывает сценарий (сценарий должен быть просто частью запроса POST). Затем скрипт Perl просто записывает результаты. Мой сервер настроен на тайм-аут около 10 секунд.

Надеюсь, это поможет!

0 голосов
/ 10 ноября 2010

Посмотрите на Каха .Он переводит сторонний код в форму, в которой код имеет доступ только к тем объектам, которые вы ему явно предоставили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...