(первоначально опубликовано на dev.to)

Node.JS — один из самых известных фреймворков для разработки серверной части приложения. Однако это никоим образом не означает, что он не содержит множества уязвимостей, о которых разработчик должен знать и предпринимать действия для их нейтрализации.

Что мы рассмотрим в этой статье

  • JS-инъекция на стороне сервера
  • «Используйте строгий»
  • Шлем
  • Изменение страниц ошибок по умолчанию
  • Правильное управление сеансом

JS-инъекция на стороне сервера

Также известен как SSJS.

Это тот случай, когда пользовательский ввод напрямую передается в собственные функции JS, такие как eval(), setTimeout(), setInterval() или Function(). Эти функции позволяют клиенту выполнять вредоносный код Javascript на стороне сервера. Это может быть команда process.exit(), которая уничтожит сервер, или вызов в файловой системе. Поэтому мы должны просто избегать использования этих функций любой ценой. Эти функции являются плохой практикой, даже если мы проверяем и очищаем вводимые пользователем данные. Чтобы предотвратить это, просто используйте JSON.parse(), это намного безопаснее.

Используйте строгий

Литерал "Use strict" должен быть объявлен в начале каждого JS-скрипта нашего приложения Node.JS. Он включает «строгий режим», который не разрешает некоторые действия, такие как использование переменной без ее объявления (т.е. x = 5.2), удаление объектов, переменных, функций и т. д. Он также ограничивает eval() варианты использования и возможные эксплойты.

Шлем

Helmet — это пакет npm (вы можете установить его, набрав npm i helmet), который устанавливает различные заголовки HTTP, которые могут представлять угрозу, если оставить значения по умолчанию. Он устанавливает заголовок Content-Security-Policy, а также позволяет разработчику установить для заголовка X-Powered-By значение, отличное от значения по умолчанию, поэтому злоумышленник не знает о реальном стеке, стоящем за приложением, работающим на сервере. Наконец, он защищает вас от множества других вещей, таких как кликджекинг, и отключает кэширование на стороне клиента.

Изменение страниц ошибок по умолчанию

Нет причин скрывать заголовок X-Powered-By, если мы сохраняем стандартные страницы ошибок Express, потому что злоумышленник все равно может понять, что наш сервер работает на Express. Мы можем сделать это, как показано во фрагменте ниже: