Подтвердить что ты не робот

Является ли nodejs безопасным как есть?

У меня есть linux box и только что установленный nodejs. Многие примеры, которые я вижу, просто выполняют определенную функцию, но не видят, где они "защищают" сервер nodejs? Например, для php я бы использовал сеансы для защиты области моего веб-сайта. Является ли nodejs нормально, как есть? Нужны ли дополнительные настройки или код в nodejs, чтобы убедиться, что к нему обращаются только нужные люди? Или это нормально "из коробки"?

4b9b3361

Ответ 1

Node - это, по сути, просто веб-сервер. Он не имеет ни малейшего представления о том, кто является "правильными людьми" для доступа к нему, и будет по умолчанию подавать запросы всем желающим.

Если вам требуются определенные механизмы контроля доступа, вы несете ответственность за их реализацию.

Ответ 2

Node.js сам по себе не является веб-сервером. Это асинхронный механизм событий, запрограммированный в Javascript.:)

PHP не выполняет вывод, который он создает. Эта задача остается на веб-сервере, таком как Apache или IIS. PHP поставляется с модулем управления сеансом (отображается через супер-глобальную переменную $_SESSION), тогда как Node.js поставляется с модулем веб-сервера ( "http" ).

Node.js позволяет делать как в одной среде, так и в том, что позволяет вам и вашей программе создавать веб-сервер самостоятельно. Это делает очень и очень простой доступ к веб-ресурсам как простой старый HTTP-сервер, тогда как с PHP ваша среда ограничена конфигурацией веб-сервера.

На самом деле, подумайте о модуле "http" больше как реализация протокола HTTP в насыщенном виде. Если вам нужен "настоящий" веб-сервер, проект, такой как express, будет гораздо более подходящим для вас, поскольку он оснащен функциями, которые такой веб-сервер, как Apache.

Кстати, экспресс-каркас уже обеспечивает поддержку сеанса.

Итак, чтобы ответить на ваш вопрос (ы): Да, Node.js в порядке, потому что он не является веб-сервером сам по себе. Когда вы втягиваете модули, вы должны учитывать их настройки. Вы полностью контролируете "опыт работы с пользователем".

Ответ 3

Я заметил, что примеры для http.createServer небезопасны, если вы не квалифицируете пути как разрешенные. Например: я смог извлечь http://localhost/../../../../../etc/passwd с помощью curl.

Я решил проблему, не разрешая обслуживать файлы, которые не находятся в текущем каталоге.

var filename = path.normalize( path.join(process.cwd(), uri) );

if (filename.indexOf(__dirname) == 0 ) {
    path.exists(filename, function(exists) {

Ответ 4

Node.js - это просто среда, в которой ваш javascript на стороне сервера будет запускаться из создаваемых вами модулей. Он предоставляет вам множество встроенных библиотек/модулей, таких как http/https. Все, что необходимо для безопасности, проверки подлинности и авторизации, должно быть написано вами или включено с использованием модулей с открытым исходным кодом. Если вы пишете веб-приложение, посмотрите Express в качестве своей структуры и используйте ее функциональные возможности сеанса, чтобы помочь вам в создании.

Что касается обеспечения безопасности сервера с точки зрения инфраструктуры, вы можете разместить его за обратным прокси, например NGiNX, и использовать брандмауэр только для открытия порта NGiNX 80 или 443 в зависимости от ваших потребностей. Это обычно удобно, так как вы будете запускать несколько экземпляров Node, чтобы соответствовать вашему счету ядра процессора, а обратный прокси-сервер может объединять между ними, позволяя закрывать порты.

Ответ 5

Экспресс поддерживает сеанс, но я прочитал некоторую статью, что желательно не использовать сеанс, если для обеспечения производительности он выделяет память. Я использовал sessionStorage для сохранения имени пользователя и пароля своих клиентов. Проблема заключается в том, что хакер может получить доступ через консоль, поэтому я нахожу библиотеку javascript для дешифрования паролей, например sjcl (http://crypto.stanford.edu/sjcl/). Но потом Другая проблема - все еще функция sjcl может получить доступ к консоли. так что я сделал переписывание функция, когда пользователь подключен к сети.

   #offline - sjcl can access in console
   #online - override the sjcl to prevent access in console
   window.sjcl = -> "back-off hacker!"

То, что я сделал, - это отправить имя пользователя и пароль на сервер при его перезагрузке через sessionStorage, чтобы он проверял и отвечал на правильную страницу (офлайн или онлайн) для вас.

Но, конечно, эта безопасность предназначена только для среднего веб-сайта, она не рекомендует некоторым банкам или правительствам. Надеюсь, вы поняли идею. ^ _ ^

пс. Я использую angularjs и express.io