Если вы только начинаете свой путь веб-разработки или Node.js, вы можете не знать, насколько важно обеспечить безопасность вашего приложения.
Express.js предоставляет эффективное решение для создания серверных веб-приложений, но не обеспечивает безопасность. Когда вы создаете веб-приложение, вам нужны адекватные меры безопасности для защиты данных ваших пользователей.
К счастью, есть методы, которые можно использовать для повышения безопасности ваших приложений Express.js. Все эти советы помогут повысить безопасность ваших приложений с помощью различных подходов.
Настройка приложения Express.js
Начните с настройки демо Веб-сервер Express.js с использованием npm, диспетчер пакетов узлов. Создайте папку проекта локально и измените каталог на нее на своем терминале.
mkdir экспресс-проект
cd экспресс-проект
Далее создайте пакет.json файл в корневом каталоге.
инициализация npm -y
Идите вперед и установите Express.js.
экспресс-установка npm
Наконец, создайте сервер.js файл в корневом каталоге папки вашего проекта и добавьте следующий код для настройки базового веб-сервера.
константа экспресс = требовать("выражать")
константа приложение = экспресс()
константа ПОРТ = процесс.env. ПОРТ || 5000приложение.получить("/", (запрос, разрешение) => {
res.json("Привет, мир!")
})
app.listen (ПОРТ, () => {
консоль.бревно(`Запуск сервера на http://localhost:${ПОРТ}`)
})
Запустите сервер с помощью этой команды:
узел server.js
Теперь вы готовы изучить некоторые меры, которые вы можете использовать для защиты своего приложения Express.js.
1. Защита приложений Express.js с помощью Helmet
Шлем — это промежуточное ПО Node.js, которое помогает защитить приложения на стороне сервера, устанавливая различные заголовки безопасности HTTP. Эти заголовки обеспечивают важные механизмы защиты от распространенные уязвимости безопасности бэкэнда, такие как межсайтовый скриптинг (XSS), подделка межсайтовых запросов (CSRF) и многие другие.
Express.js не настраивает заголовки безопасности HTTP по умолчанию, оставляя потенциальную уязвимость в безопасности, которая раскрывает потенциально конфиденциальные заголовки. Используя эту информацию, злоумышленники могут получить несанкционированный доступ или иным образом нарушить работу вашего приложения.
Шлем выступает в качестве жизненно важного щита, гарантируя, что HTTP-ответы приложения принимают необходимые меры безопасности, что значительно снижает потенциальную поверхность атаки.
Изучение безопасности приложений Express.js без шлема
При работающем сервере проверьте заголовки приложения. Иди вперед и делать HTTP-запросы к API с помощью Postman или любой другой клиент, который показывает заголовки ответов. Большинство браузеров включают в себя набор инструментов разработчика, которые позволят вам сделать это.
Когда вы отправляете запросы на домашнюю конечную точку, вы должны наблюдать аналогичные результаты в Заголовки раздел ответа в Postman.
Обратите внимание на X-Powered-By заголовок. Как правило, серверные технологии используют этот заголовок для указания платформы или другого программного обеспечения, на котором работает веб-приложение. Обычно следует удалить X-Powered-By заголовок в производственной среде.
Тем самым вы не позволите потенциальным злоумышленникам получить ценную информацию, которую они могли бы использовать для использования известных уязвимостей, связанных с вашим стеком технологий.
Протестируйте конфигурацию безопасности сервера Express.js
Чтобы оценить состояние безопасности ваших приложений, мы будем использовать Заголовки безопасности онлайн инструмент. Это приложение специально разработано для оценки конфигурации безопасности заголовков HTTP для клиентских и серверных приложений.
Во-первых, вам нужно сделать ваш локальный сервер Express.js доступным через Интернет. Для этого есть два возможных подхода: развертывание приложения Express.js на облачном сервере или использование ngrok.
Чтобы использовать его, скачать нгрок zip, извлеките исполняемый файл и запустите приложение. Затем выполните следующую команду, чтобы разместить локальный сервер Express.js с помощью ngrok.
нгрок http 5000
ngrok выведет краткую информацию, которая выглядит следующим образом:
Скопируйте предоставленный URL переадресации и вставьте его в Заголовки безопасности' поле ввода и нажмите на Сканировать кнопка.
После завершения оценки безопасности вы должны получить аналогичный отчет.
Судя по отчету, сервер Express.js получил плохую оценку. Ф оценка. Этот низкий уровень является результатом отсутствия в конфигурации сервера основных заголовков безопасности HTTP — их отсутствие делает сервер уязвимым для потенциальных угроз безопасности.
Интеграция Helmet в приложение Express.js
Теперь приступайте к интеграции Helmet в ваше приложение Express.js. Запустите команду ниже, чтобы установить зависимость.
нпм установить шлем
Обновите файл server.js и импортируйте Helmet.
константа шлем = требовать("шлем")
Теперь добавьте Helmet в свое приложение Express.js.
app.use (шлем())
Наконец, запустите сервер разработки, скопируйте ссылку для пересылки с нгрока терминал и вставьте его в Заголовок безопасности поле ввода для повторного сканирования локального сервера. После завершения повторного сканирования вы должны увидеть результаты, аналогичные этим:
После интеграции Helmet Express.js включает в ответ HTTP несколько важных заголовков безопасности. Это существенное улучшение привело к переходу приложения Express.js на А оценка.
Хотя Helmet не является надежным решением, он значительно повышает общую безопасность вашего приложения Express.js.
2. Защита приложений Express.js с помощью Joi, библиотеки проверки ввода
Джой — это библиотека проверки ввода, которая помогает защитить приложения Express.js, предоставляя удобный способ проверки и очистки ввода пользователя. Определив схемы проверки с помощью Joi, вы можете указать ожидаемую структуру, типы данных и ограничения для входящих данных.
Joi проверяет ввод по определенной схеме, гарантируя, что он соответствует указанным критериям. Это помогает предотвратить распространенные уязвимости безопасности, такие как внедрение данных, межсайтовый скриптинг (XSS) и другие атаки с манипулированием данными.
Выполните следующие действия, чтобы интегрировать Joi в ваше приложение.
- Установите Джой.
инструкция по установке npm
- Импортируйте Joi в файл server.js.
константа Джой = требовать('дзёи');
- Создайте схему проверки данных Joi, которая определяет ожидаемую структуру и любые ограничения для входных данных.
константа схема = Joi.object({
электронная почта: Joi.string().email().required(),
пароль: Joi.string().min(5).Макс(16).необходимый()
}); - Проверяйте все входящие данные, используя определенную схему.
константа { ошибка, значение } = schema.validate(req.body);
если (ошибка) {
// Обработка ошибки проверки
// Например, вернуть ответ об ошибке
возвращаться рез.статус(400).json({ ошибка: ошибка.детали[0].сообщение });
}
Выполняя эти шаги, вы можете использовать возможности проверки ввода Joi для защиты ваших приложений Express.js. Это гарантирует, что входящие данные соответствуют определенным ограничениям, предотвращая потенциальные угрозы безопасности при манипулировании данными.
3. Защита приложений Express.js с помощью механизма CORS
Совместное использование ресурсов между источниками (CORS) — это механизм, который веб-серверы используют для управления тем, какие источники — клиенты или другие серверные приложения — могут получать доступ к своим защищенным ресурсам. Этот механизм помогает защититься от несанкционированных запросов между источниками, предотвращая такие проблемы, как атаки с использованием межсайтовых сценариев (XSS).
Чтобы защитить приложения Express.js с помощью CORS, выполните следующие действия.
- Установите пакет CORS.
npm установить корс
- Требовать и использовать ПО промежуточного слоя CORS в файле server.js.
константа кор = требовать(корс);
app.use(cors());
Интегрируя промежуточное ПО CORS в ваше приложение Express.js, вы включаете совместное использование ресурсов между источниками. Это гарантирует, что вы снизите потенциальные риски безопасности, связанные с запросами из разных источников.
Защита серверных приложений с легкостью
Вы можете использовать одну или несколько из этих важных мер для повышения безопасности ваших приложений Express.js.
Несмотря на то, что существует множество мер и подходов для защиты ваших серверных приложений, ключевой вывод заключается в том, что вы должны отдавать приоритет безопасности на протяжении всего жизненного цикла разработки. Это задача, которая начинается на этапе проектирования и должна продолжаться вплоть до развертывания.