«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Шаги по предотвращению атак «человек посередине» (MitM) в приложениях JavaScript

Шаги по предотвращению атак «человек посередине» (MitM) в приложениях JavaScript

Опубликовано 1 августа 2024 г.
Просматривать:645

Steps to Preventing Man-in-the-Middle (MitM) Attacks in JavaScript Applications

Атаки «человек посередине» (MitM) представляют значительную угрозу веб-безопасности. В ходе этих атак злоумышленник перехватывает связь между клиентом и сервером, позволяя им подслушивать, манипулировать или красть данные. В этом блоге мы рассмотрим, как атаки MitM работают в контексте приложений JavaScript, и предоставим практические шаги по защите вашего приложения от этих угроз.

Что такое атака «человек посередине»?

Атака «Человек посередине» происходит, когда злоумышленник тайно перехватывает и передает сообщения между двумя сторонами, которые считают, что они напрямую общаются друг с другом. Этот перехват может привести к несанкционированному доступу к конфиденциальным данным, таким как учетные данные для входа, финансовая информация и личные данные.

Как работают MitM-атаки

MitM-атаки могут осуществляться различными способами, в том числе:

1. Подмена DNS: Подмена DNS включает в себя изменение записей DNS для перенаправления пользователей на вредоносные веб-сайты.

Пример:
Предположим, вы развернули приложение Node.js и React на xyz.com. Хакер может манипулировать записями DNS так, что когда пользователи пытаются посетить xyz.com, они перенаправляются на вредоносный сайт, который выглядит идентично вашему.

Шаги по предотвращению подмены DNS:

  • Используйте DNSSEC (расширения безопасности системы доменных имен), чтобы добавить дополнительный уровень безопасности.
  • Регулярно отслеживайте и обновляйте свои записи DNS.
  • Используйте проверенных поставщиков DNS, которые предлагают функции безопасности от подмены DNS.
# Example of enabling DNSSEC on your domain using Cloudflare
# Visit your domain's DNS settings on Cloudflare
# Enable DNSSEC with a single click

2. Подмена IP
IP-спуфинг предполагает притворство доверенным IP-адресом для перехвата сетевого трафика.

Пример:
Злоумышленник может подделать IP-адрес вашего сервера, чтобы перехватить трафик между вашими клиентами и вашим сервером Node.js.

Шаги по предотвращению подмены IP-адреса:

  • Внедрите белый список IP-адресов, чтобы только доверенные IP-адреса могли обмениваться данными с вашим сервером.
  • Используйте меры безопасности на уровне сети, такие как VPN и брандмауэры.
  • Обеспечите правильную проверку и фильтрацию IP-адресов на вашем сервере.
// Example of IP whitelisting in Express.js
const express = require('express');
const app = express();

const allowedIPs = ['123.45.67.89']; // Replace with your trusted IPs

app.use((req, res, next) => {
  const clientIP = req.ip;
  if (!allowedIPs.includes(clientIP)) {
    return res.status(403).send('Forbidden');
  }
  next();
});

// Your routes here

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

3. Подмена HTTPS
Подмена HTTPS предполагает создание поддельных сертификатов SSL для имитации защищенного веб-сайта.

Пример:
Злоумышленник может создать поддельный сертификат SSL для xyz.com и настроить вредоносный сервер, который будет выглядеть идентично вашему законному серверу.

Шаги по предотвращению спуфинга HTTPS:

  • Используйте прозрачность сертификатов, чтобы отслеживать и регистрировать все сертификаты, выданные для вашего домена.
  • Внедрите закрепление открытого ключа HTTP (HPKP), чтобы связать криптографический открытый ключ вашего веб-сервера с определенным набором веб-сайтов HTTPS.
// Example of implementing HPKP in Express.js
const helmet = require('helmet');
const app = express();

app.use(helmet.hpkp({
  maxAge: 60 * 60 * 24 * 90, // 90 days
  sha256s: ['yourPublicKeyHash1', 'yourPublicKeyHash2'], // Replace with your public key hashes
  includeSubDomains: true
}));

// Your routes here

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

4. Прослушивание Wi-Fi
Подслушивание Wi-Fi предполагает перехват данных, передаваемых по незащищенным сетям Wi-Fi.

Пример:
Хакер может установить вредоносную точку доступа Wi-Fi и перехватывать данные, передаваемые между пользователями и вашим сервером, когда они подключаются к ней.

Шаги по предотвращению прослушивания Wi-Fi:

  • Предлагайте пользователям подключаться только к безопасным сетям Wi-Fi.
  • Внедрите сквозное шифрование (E2EE) для защиты данных, передаваемых между клиентом и сервером.
  • Используйте VPN для шифрования трафика между клиентами и вашим сервером.
// Example of enforcing HTTPS in Express.js
const express = require('express');
const app = express();

app.use((req, res, next) => {
  if (req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
  }
  next();
});

// Your routes here

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

Предотвращение атак MitM в приложениях JavaScript

1. Используйте HTTPS повсюду
Убедитесь, что все соединения между клиентом и сервером зашифрованы с использованием HTTPS. Используйте такие инструменты, как Let's Encrypt, чтобы получить бесплатные сертификаты SSL/TLS.

// Enforce HTTPS in Express.js
const express = require('express');
const app = express();

app.use((req, res, next) => {
  if (req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
  }
  next();
});

// Your routes here

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

2. Проверка сертификатов SSL/TLS
Используйте строгую проверку сертификатов SSL/TLS и избегайте самозаверяющих сертификатов в рабочей среде.

3. Внедрить политику безопасности контента (CSP)
Используйте заголовки CSP, чтобы ограничить источники, из которых ваше приложение может загружать ресурсы, снижая риск внедрения вредоносных сценариев.

// Setting CSP headers in Express.js
const helmet = require('helmet');
app.use(helmet.contentSecurityPolicy({
  directives: {
    defaultSrc: ["'self'"],
    scriptSrc: ["'self'", 'trusted.com'],
    styleSrc: ["'self'", 'trusted.com']
  }
}));

4. Используйте безопасные файлы cookie
Убедитесь, что файлы cookie помечены как «Безопасные» и «HttpOnly», чтобы предотвратить доступ к ним через клиентские сценарии.

// Setting secure cookies in Express.js
app.use(require('cookie-parser')());
app.use((req, res, next) => {
  res.cookie('session', 'token', { secure: true, httpOnly: true });
  next();
});

5. Внедрение HSTS (строгая транспортная безопасность HTTP)
Используйте HSTS, чтобы заставить браузеры обмениваться данными с вашим сервером только через HTTPS.

// Setting HSTS headers in Express.js
const helmet = require('helmet');
app.use(helmet.hsts({
  maxAge: 31536000, // 1 year
  includeSubDomains: true,
  preload: true
}));

Атаки «человек посередине» могут иметь разрушительные последствия для веб-приложений, приводя к краже данных и атакам путем внедрения. Поняв, как работают эти атаки, и приняв надежные меры безопасности, вы сможете защитить свои приложения JavaScript и обеспечить безопасность данных своих пользователей. Всегда используйте HTTPS, проверяйте сертификаты SSL/TLS, внедряйте CSP, защищайте файлы cookie и применяйте HSTS для снижения рисков атак MitM.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/rigalpatel001/steps-to-preventing-man-in-the-middle-mitm-attacks-in-javascript-applications-3ah4?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3