2015-03-18 4 views
0

PHP делает относительно простым ограничение того, что пользователь может делать на сервере - просто поручите ему отключить функции с помощью директивы php.ini disable_functions. Есть ли аналогичная возможность в Node.js? Точка поиска в googling с более очевидными фразами оказалась пустой. Я предполагаю, что можно сделать что-то подобное, контролируя только то, что может входить в предложения. Однако, возможно, есть другой путь? Я был бы очень обязан всем, кто мог бы указать мне в правильном направлении.Securing Node.js


Судя по комментариям я должен прояснить этот вопрос

  1. Контекст - Я настраиваю сервис, который позволяет пользователям запускать свой собственный код узла в контейнере Докер. Контейнеры-докеры достаточно безопасны, но, как доказывает Докер, нет гарантии на чугун, что контейнер представляет собой Песочницу без какого-либо риска выброса из нее.
  2. В причине я хочу, чтобы позволить пользователям использовать внешние модули, использование которых объявлен в коде с использованием стандартного узла требуется («имя_модуля») Синтаксис

Теперь предположим, что я позволил этому случиться и палочки пользователя в

require('shelljs/global'); 

Boom ... Пользователь имеет возможность запускать команды оболочки. Итак, как я могу остановить это? Один из способов - сыграть полицейского и строго контролировать, какие внешние модули он может подключить таким образом. Другой - и, следовательно, мой вопрос - если есть стиль php.ini, просто блокирующий доступ к определенным capabilties .... Из моего понимания того, как работает Узел (и он еще несовершенен), это невозможно. Однако, учитывая, что я относительный новичок, я думал, что попрошу здесь и посмотрю, что те, кто понимает Узел, лучше, чем я должен сказать.

+0

Код оценивается во время выполнения, любые изменения в файлах JavaScript не влияют на текущее запущенное приложение до его перезапуска. –

+0

Вы имеете в виду, что вы, как администратор сервера, хотите ограничить возможности разработчиков или приложений на этом сервере в приложении node.js? –

+0

@Kevin B - см. Мой перефразированный вопрос. Вкратце ответ на ваш комментарий: да. – DroidOS

ответ

0

Я не уверен, что вы имеете в виду, но вы можете контролировать, что вы экспортируете из экспорта модулей. Например:

var DB = require("db"); 

var userFromDB = DB.find("username"); 

modules.exports = { 
    publicUser: userFromDB.publicData 
} 

Мы только сделали userFromDB.publicData общественности вместо всего userFromDB объекта. Никто из общественности не может получить доступ к чему-либо еще.

+0

Я отменяю нижний предел вашего ответа, учитывая, что вы ответили, прежде чем я расширил описание проблемы в моем вопросе. Оригинал, хотя, возможно, совершенно ясный для программиста PHP, возможно, не был таким для нынешней аудитории. – DroidOS

0

Один из способов предотвратить один угол атаки - установить глобальную папку пути в оболочке на нечто другое, чем по умолчанию, перед запуском node.js.

Тогда у вас могут возникнуть проблемы с приложениями, на которых действительно требуются глобальные модули, но вы могли бы npm link их или подобных.