← Назад к вопросам

В чем разница между перехваченным трафиком HTTP и HTTPS?

1.3 Junior🔥 271 комментариев
#Браузер и сетевые технологии

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

В чем разница между перехваченным трафиком HTTP и HTTPS

HTTP и HTTPS — это протоколы передачи данных. Главная разница в безопасности: HTTP передаёт данные в открытом виде, а HTTPS шифрует. Это имеет критические последствия для перехвата трафика.

HTTP: Открытые данные

HTTP (HyperText Transfer Protocol) передаёт все данные без шифрования, в открытом виде.

Клиент                          Сервер
   |
   | Отправляет: POST /login
   | Тело: {"email": "john@example.com", "password": "secret123"}
   |
   v (В открытом виде по сети!)

Аттакующий может перехватить и прочитать:
- Email пользователя
- Пароль пользователя
- Cookies и токены
- Приватные данные
- Параметры запроса
// При HTTP запросе:
const request = `
POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/json

{"email": "john@example.com", "password": "secret123"}
`;

// Любой в сети может прочитать это используя:
// - tcpdump (Linux)
// - Wireshark
// - простое прослушивание сети

Проблемы HTTP:

  • Пароли видны в открытом виде
  • Cookies можно украсть (session hijacking)
  • Man-in-the-middle (MITM) атаки
  • Модификация данных в пути
  • Фишинг (сайт может подделать)

HTTPS: Шифрованные данные

HTTPS (HTTP Secure) шифрует все данные между клиентом и сервером с помощью TLS/SSL.

Клиент                          Сервер
   |
   | TLS Handshake (установка безопасного канала)
   | - Обмен ключами
   | - Проверка сертификата
   |<------> (Защищённое соединение установлено)
   |
   | Отправляет (ЗАШИФРОВАНО): POST /login
   | Тело (ЗАШИФРОВАНО): {"email": "john@example.com", "password": "secret123"}
   |
   v (Зашифровано, бессмысленно для атакующего)

Аттакующий видит только:
- Шифротекст (gibberish)
- IP адреса (обычно известны)
- Доменное имя (SNI, видно в TLS handshake)
- Размер передаваемых данных (metadata)
Что видит MITM при HTTPS:

   |
   | Шифрованные данные:
   | \x34\x8f\x2a\x91\xc4\xb3\x7d\x2e\xf6\x1a\x8c\x9b\x5e\xd0\x77\x3c...
   | \xa2\x5f\xb1\x9d\xc7\x3a\x6e\x2b\x4c\x8f\x92\xd1\x51\x87\x3e\x9a...
   |
   | Невозможно прочитать или модифицировать
   v

Визуальное сравнение

HTTP (уязвим)

Браузер                 MITM Атакующий              Сервер
   |
   |------ GET /user/123/password ---------->
   |                       |
   |                       | Перехватывает и видит пароль!
   |                       |
   |                       |---> Сервер
   |                       |                         |
   |<---- Ответ (пароль) <------ Ответ (пароль) <---|
   |
   | (Атакующий видит всё: GET параметры, пароли, cookies)

HTTPS (защищён)

Браузер                 MITM Атакующий              Сервер
   |
   | TLS Handshake +証書 проверка
   |------Зашифровано----->
   |                       |
   |                       | Видит только шифротекст
   |                       | Не может модифицировать
   |                       | Сертификат валиден
   |                       |
   |                       |---Зашифровано---> Сервер
   |                       |                   |
   |<---- Зашифровано <---- Зашифровано <-----|
   |
   | (Атакующий не видит содержимое, не может модифицировать)

Шифрование в HTTPS

// Упрощённо, как работает HTTPS:

// 1. TLS Handshake
const clientHello = {
  tlsVersion: "1.3",
  supportedCiphers: ["AES-256-GCM", "ChaCha20"],
  clientRandom: "random_bytes_32"
};

const serverHello = {
  selectedCipher: "AES-256-GCM",
  certificate: "<base64 encoded cert>",
  serverRandom: "random_bytes_32"
};

// Обе стороны генерируют общий секрет (symmetric key)
const sharedSecret = deriveKey(clientRandom, serverRandom);

// 2. Все последующие данные шифруются этим ключом
const plaintext = JSON.stringify({email, password});
const encrypted = aes256Encrypt(plaintext, sharedSecret);

// 3. Передача зашифрованных данных
socket.send(encrypted); // Даже MITM не может расшифровать

Что видит MITM при перехвате

HTTP (Полная уязвимость)

// Перехваченный HTTP трафик (видно ВСЕ):

POST /api/users/profile HTTP/1.1
Host: example.com
Cookie: session_id=abc123def456
Content-Type: application/json

{
  "username": "john_doe",
  "email": "john@example.com",
  "password": "MySecretPassword123!",
  "creditCard": "4532-1234-5678-9012",
  "cvv": "123"
}

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": "12345",
  "email": "john@example.com",
  "accountBalance": "$5000"
}

Что может сделать атакующий:

  • Украсть пароль и логин
  • Использовать session cookie
  • Украсть данные кредитной карты
  • Модифицировать запрос (изменить accountBalance)
  • Выдать себя за сервер

HTTPS (Защищено)

// Перехваченный HTTPS трафик (видно ТОЛЬКО metadata):

TCP Packet (зашифрован):
  Source IP: 192.168.1.100
  Dest IP: 93.184.216.34 (example.com)
  Dest Port: 443 (HTTPS)
  
  TLS Record Layer:
    Type: Application Data
    Version: TLS 1.3
    Length: 256 bytes
    Encrypted Payload: \x8f\x2a\x1c\x9b\x4e\x3d\x72\xa1...
    (невозможно расшифровать без приватного ключа сервера)
    
  MITM видит:
  - Что клиент общается с example.com
  - Размер передаваемых данных (~256 bytes)
  - Примерное время запроса
  
  MITM НЕ видит:
  - Содержимое запроса
  - Пароли
  - Cookies
  - Никакие приватные данные

Атаки на HTTP

// 1. Перехват credentials (Man-in-the-Middle)
const userCredentials = {
  email: "user@example.com",
  password: "realPassword123"
};
// MITM перехватит и использует для входа

// 2. Session Hijacking
const sessionCookie = "session_id=abc123xyz789";
// MITM украдёт cookie и будет выдавать себя за пользователя

// 3. Модификация ответа
const originalResponse = {
  accountBalance: "$5000"
};
// MITM может изменить ответ и отправить $50000

// 4. Фишинг
// MITM может подменить весь сайт, так как нет проверки SSL сертификата

Защита HTTPS

// HTTPS защищает от:

// 1. Шифрование (Confidentiality)
// Данные не видны в открытом виде
const encrypted = encrypt(plaintext, key);

// 2. Проверка целостности (Integrity)
// Нельзя модифицировать данные в пути
const hmac = sign(data, key);
const isValid = verify(hmac, data, key); // true/false

// 3. Аутентификация (Authentication)
// Проверка что это действительно сервер (через сертификат)
const cert = server.certificate;
const isValidCert = verifyCertificate(cert, trustedCA);

// 4. Forward Secrecy (опционально)
// Даже если ключ сервера украден, старые сеансы в безопасности
const ephemeralKey = generateRandomKey(); // Новый для каждого сеанса
const sessionKey = deriveKey(ephemeralKey, masterSecret);

Даже HTTPS имеет ограничения

// HTTPS защищает трафик в пути, но НЕ защищает:

// 1. Metadata (видно в SNI — Server Name Indication)
const clientHello = {
  serverName: "example.com" // Видно в открытом виде
};
// MITM знает, что пользователь посещает example.com

// 2. Timing атаки (размер пакетов может раскрыть информацию)
const packetSizes = [256, 512, 1024]; // Можно анализировать

// 3. Что-то на конце-концов передаётся (тип данных)
const responseSize = 1024; // Большой размер может означать большой объём данных

// 4. Что на диске клиента (браузер может кэшировать пароль)
// Нужна дополнительная защита: Content-Security-Policy, X-Frame-Options

Проверка HTTPS в браузере

// JavaScript может проверить текущий протокол:

if (window.location.protocol === "https:") {
  console.log("Безопасное соединение");
} else {
  console.warn("Небезопасное HTTP соединение!");
}

// В HTTPS режиме доступны дополнительные API:
// - Service Workers (требуют HTTPS)
// - Geolocation API (требует HTTPS)
// - Camera/Microphone (требуют HTTPS)
// - Web Crypto API (требует HTTPS)

HSTS (HTTP Strict Transport Security)

// Сервер может отправить заголовок:
// Strict-Transport-Security: max-age=31536000; includeSubDomains

// Браузер будет:
// 1. Всегда переходить на HTTPS (даже если ввести http://)
// 2. Отклонять самоподписанные сертификаты
// 3. Запомнить это на 1 год

// Это защищает от downgrade атак

Заключение

HTTP: все данные видны в открытом виде, уязвим для:

  • Перехвата пароля
  • Модификации данных
  • Session hijacking
  • MITM атак
  • Фишинга

HTTPS: данные шифруются, защищает от всего выше, а также:

  • Гарантирует аутентичность сервера (сертификат)
  • Проверяет целостность данных
  • Невозможно модифицировать в пути
  • Невозможно выдать себя за сервер

Практическое значение:

  • Все приложения должны использовать HTTPS
  • Передача паролей, tokens, payment информации БЕЗ HTTPS = критическая уязвимость
  • Даже публичные данные лучше передавать через HTTPS (metadata тоже ценна)
  • HTTPS стал стандартом — и браузеры будут показывать предупреждения для HTTP
В чем разница между перехваченным трафиком HTTP и HTTPS? | PrepBro