Лучшие практики безопасности в Node.js

Опубликовано: 2 Августа, 2021

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

  • Надежное шифрование паролей с помощью соли и хэша: чтобы зашифровать пароль в экспресс-приложении, мы собираемся использовать пакет bcyrpt.js, который зашифрует пароль и преобразует его в хэш-код, который не читается злоумышленниками.
  • Сильно зашифрованный токен сброса паролей: всякий раз, когда пользователь собирается оставить пароль, должен быть сгенерирован новый хэш-код сброса пароля, чтобы никто из злоумышленников его не понял.

Атаки грубой силы: при атаках грубой силы злоумышленники постоянно пытаются сгенерировать случайный пароль. В этом случае злоумышленники пытаются угадать пароль, генерируя миллионы паролей, пока не найдут правильный пароль. Итак, как избежать и обезопасить себя от этих типов атак:

  • Используйте пакет bcrypt.js: он хеширует пароль при сохранении его в базе данных.
  • Внедрение ограничения скорости: ограничение скорости ограничивает количество запросов, поступающих с одного IP-адреса.
  • Реализуйте максимальное количество попыток входа в систему для каждого пользователя: вы можете установить ограничение, согласно которому после некоторых неудачных попыток входа вы не сможете войти в систему до определенного периода времени.

Атаки с использованием межсайтовых сценариев (XSS): атаки XSS, при которых злоумышленники пытаются внедрить некоторые вредоносные сценарии в наш код, чтобы найти лазейку и воспользоваться этим. Этот тип атаки опасен, поскольку позволяет злоумышленникам читать локальное хранилище на стороне клиента. По этой причине мы не рекомендуем хранить токены JWT в локальном хранилище.
Как предотвратить эти типы атак:

  • Хранить токены JWT в файлах cookie только HTTP: никогда не хранить токены JWT в локальном хранилище, всегда использовать файлы cookie только HTTP.
  • Санитарная обработка данных, вводимых пользователем: дезинфекция вводимых пользователем данных означает, что мы ограничиваем пользователя, чтобы он не вводил странные данные.
  • Установите специальные заголовки HTTP: вы можете использовать встроенный пакет npm для добавления некоторых специальных заголовков, чтобы это помогло в безопасности. Шлем будет устанавливать различные заголовки HTTP, чтобы защитить ваше приложение.

Атаки типа "отказ в обслуживании" (DOS): при атаках DOS злоумышленники делают так много запросов к серверу, что он выходит из строя и становится недоступным для пользователей, и они там работали, поэтому существует множество способов предотвратить такие атаки. способы предотвращения от них:

  • Внедрение ограничения скорости: используя ограничение скорости, вы можете легко предотвратить такие типы атак, вы создаете функцию ограничения скорости, с помощью которой вы можете ограничить количество запросов, сделанных пользователями.
  • Ограничить полезную нагрузку тела: мы также можем ограничить объем данных, отправляемых в полезной нагрузке тела, чтобы нагрузка не была настолько высокой, что приводит к сбою нашего приложения.
  • Избегайте злых регулярных выражений: это регулярные выражения, выполнение которых требует экспоненциального времени для несоответствующего ввода.

NoSql Query Injection: этот тип атак происходит, когда злоумышленники вместо ввода действительных данных вводят некоторый запрос, который приведет к истине для некоторого поля без правильных данных, например, в поле имени пользователя злоумышленник помещает некоторые данные, которые приведут к истине, и тем самым злоумышленники принимают доступ к вашим личным данным. Чтобы избежать этого, используйте Mongoose для MongoDB, который обеспечивает проверку схемы, чтобы вы могли легко проверять и предотвращать такие атаки.

Другие лучшие практики:

  • Создавайте случайные пароли и сбрасывайте токены с истечением срока действия.
  • Запретить доступ к токену JWT после смены пароля.
  • Не передавайте конфиденциальные данные или конфигурацию в git.
  • Всегда используйте двухфакторную аутентификацию.
  • Всегда трать как можно больше времени на функции аутентификации, авторизации и безопасности вашего приложения.