(первоначально опубликовано на 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. Мы можем сделать это, как показано во фрагменте ниже: