Насколько надежным является nodejs как http-сервер?
Если я использую http-модуль nodejs для создания простого http-сервера, сколько валидации/проверки нужно делать?
Поддерживает ли модуль проблемы безопасности, такие как неверные запросы и запросы со злонамеренными значениями заголовка? Обеспечивает ли модуль, что все следует за спецификацией http, или мне нужно сделать много проверок, чтобы убедиться, что мой сервер не просто сбой?
Изменить: пусть говорят, что nodejs не выполняет никакой реальной проверки, что я вполне уверен в этом. Что мне нужно сделать, чтобы убедиться, что мой сервер не легко сработает?
Ответы
Ответ 1
Что такое вредоносное значение заголовка? Node - низкий уровень, поэтому многие вещи не проверяются. Но вы должны смотреть на эти вещи. Но это не значит, что кто-то может отправить "выполнить 0xFA894224" или что-то в этом роде. Единственные отверстия, которые, вероятно, имеют такие вещи, как разрешение искаженного запроса (например, возможно, вы можете получить request.location: "\*\*\* CHINAAA \*\*\*"
, забыв запустить событие закрытия сокета или выбросив ошибку JavaScript и изящно завершая.
Вы всегда можете проверить себя на эти вещи или использовать блок catch try, process.on и т.д. Конечно, это не означает, что не может быть переполнение буфера или что-то где-то, но маловероятно, учитывая Node построен поверх v8, а многие библиотеки - это чистый JavaScript
Изменить:
Как остановить случайные сбои:
process.on('uncaughtException',function() {
/* ignore error */
});
Ответ 2
NodeJS не был использован для использования в качестве HTTP-сервера, ориентированного на мир. Однако возможности HTTP можно использовать для запросов прокси на соответствующий веб-сервер.
Вне темы, но Nginx действительно хорош в этом, так как он содержит устойчивое количество потоков.