#node.js
#node.js
Вопрос:
У меня есть Linux-бокс, и я только что установил nodejs. Многие примеры, которые я вижу, просто выполняют определенную функцию, но нигде не видят, что они «защищают» сервер nodejs? Например, для php я бы использовал сеансы для защиты области моего веб-сайта. Все ли в порядке с nodejs как есть? Нужны ли дополнительные настройки или код в nodejs, чтобы убедиться, что к нему обращаются только нужные люди? Или это нормально прямо «из коробки»?
Комментарии:
1. К счастью Node.js это не PHP.
Ответ №1:
Node.js сам по себе не является веб-сервером. Это механизм асинхронных событий, запрограммированный на Javascript. 🙂
PHP не обслуживает выходные данные, которые он генерирует. Эта задача возлагается на веб-сервер, такой как Apache или IIS. PHP поставляется с модулем управления сеансом (доступным через сверхглобальную переменную $_SESSION), тогда как Node.js поставляется с модулем веб-сервера («http»).
Node.js позволяет выполнять и то, и другое в одной среде, поскольку позволяет вам и вашей программе самостоятельно создавать экземпляры веб-сервера. Это позволяет очень, очень легко предоставлять функциональность в Интернете в качестве простого старого веб-сервера HTTP (s), тогда как с PHP ваша среда ограничена конфигурацией веб-сервера.
На самом деле, думайте о модуле «http» скорее как о реализации протокола HTTP в насыщенном виде. Если вам нужен «настоящий» веб-сервер, такой проект, как express, будет гораздо более подходящим для вас, потому что он поставляется с функциями, которые предоставляет веб-сервер, такой как Apache.
Кстати, express Framework уже предоставляет поддержку сеансов.
Итак, чтобы фактически ответить на ваш вопрос (ы): да, Node.js все в порядке как есть, потому что сам по себе он не является веб-сервером. Когда вы подключаете модули, вы должны учитывать их настройки. Вы полностью контролируете «взаимодействие с агентом пользователя».
Ответ №2:
Узел — это, по сути, просто веб-сервер. Он не имеет ни малейшего представления о том, кто такие «правильные люди» для доступа к нему, и по умолчанию будет обслуживать запросы всем желающим.
Если вам требуются конкретные механизмы контроля доступа, вы несете ответственность за их реализацию самостоятельно.
Комментарии:
1. Узел не является веб-сервером. Express — это веб-сервер на узле.
2. @Ped Express — это не веб-сервер, это веб-фреймворк. Node.js предоставляет http-сервер в своем ядре, который расширяет Express.
3. Итак, nodejs — это среда выполнения. Модуль http превращает его в веб-сервер.: )
4. Сервер — это Linux box: D
Ответ №3:
Я заметил, что примеры для http.createServer небезопасны, если вы не определяете пути как разрешенные. например: я смог получитьhttp://localhost/../../../../../etc/passwd с завитком.
Я решил проблему, не разрешив обслуживать какие-либо файлы, которых нет в текущем каталоге.
var filename = path.normalize( path.join(process.cwd(), uri) );
if (filename.indexOf(__dirname) == 0 ) {
path.exists(filename, function(exists) {
Комментарии:
1. Также было бы неплохо запустить node под учетной записью, у которой нет разрешений на доступ к тому, к чему вы этого не хотите.
2. Спасибо, я искал простой пример только одной из вещей, которые кто-то может пропустить, не используя express.js
Ответ №4:
Node.js это просто среда, в которой ваш серверный javascript будет запускаться из созданных вами модулей. Он предоставляет вам множество встроенных библиотек / модулей, таких как http / https. Все, что касается безопасности, аутентификации и авторизации, должно быть написано вами или включено с использованием модулей с открытым исходным кодом. Если вы пишете веб-приложение, посмотрите на Express как на свой фреймворк и используйте его функциональность сеанса, чтобы помочь в создании.
Что касается защиты сервера с точки зрения инфраструктуры, вы можете разместить его за обратным прокси, таким как NGiNX, и использовать брандмауэр только для открытия порта 80 или 443 NGiNX в зависимости от ваших потребностей. Обычно это удобно, поскольку вы будете запускать несколько экземпляров Node в соответствии с количеством ядер вашего процессора, а обратный прокси-сервер может выполнять циклический перебор между ними, позволяя вам сохранять порты закрытыми.
Ответ №5:
Express поддерживает сеанс, но я прочитал какую-то статью, в которой рекомендуется не использовать сеанс, если для повышения производительности он выделяет память. Я использовал 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, чтобы он проверил и ответил на соответствующую страницу (автономную или онлайн) для вас.
Но, конечно, эта защита предназначена только для обычного веб-сайта, она не рекомендуется некоторым банкам или правительствам. Я надеюсь, вы поняли идею .. ^ _^
ps. я использую angularjs и express.io
Комментарии:
1. Это не безопасность.