Почему HTTP небезопасен

Почему HTTP небезопасен

Мы разобрали HTTP подробно: запросы, ответы, заголовки, кэширование. Но у HTTP есть фундаментальная проблема — он передаёт данные открытым текстом. Любой, кто имеет доступ к сети между клиентом и сервером, может читать трафик. В этом уроке разберём, что это значит на практике и почему HTTPS стал не опцией, а стандартом.

HTTP = открытый текст

HTTP-сообщения — это обычный читаемый текст. Запрос, который отправляет браузер при вводе пароля на сайте без HTTPS, выглядит так:

POST /login HTTP/1.1
Host: bank.example.com
Content-Type: application/x-www-form-urlencoded

username=ivan&password=secret123

Каждый участник цепочки между тобой и сервером видит логин и пароль в чистом виде. Это не ошибка протокола — HTTP проектировался в 1991 году, когда интернет был академической сетью с доверием между участниками.

Кто может прочитать трафик

Цепочка передачи данных через интернет длинная. Пакет проходит через твой роутер, оборудование провайдера, магистральных операторов, и на каждом участке данные можно перехватить:

  • Публичный Wi-Fi (кафе, аэропорт). В открытых сетях трафик виден всем в той же сети. Владелец точки доступа или сосед за соседним столиком с Wireshark читает твои запросы. Использовать HTTP в публичном Wi-Fi — всё равно что кричать пароль через всю кофейню.
  • Провайдер. Твой интернет-провайдер технически может видеть весь HTTP-трафик. В некоторых странах провайдеры обязаны собирать метаданные или даже содержимое запросов.
  • Злоумышленник в сети. ARP-спуфинг позволяет атакующему в локальной сети притвориться роутером и перехватывать весь трафик жертвы. Простая атака, работающая на HTTP.

Man-in-the-Middle (MITM)

Самая опасная атака на HTTP — Man-in-the-Middle (человек посередине). Атакующий встраивается в канал связи и не просто читает данные, но и может изменять их:

Клиент → [Атакующий] → Сервер
           ↑
    Видит, изменяет, вставляет

На HTTP атакующий может:

  • Украсть пароли и cookies сессии.
  • Подменить ответ сервера: вместо запрошенной страницы вставить вредоносный скрипт.
  • Перенаправить пользователя на поддельный сайт.

Без HTTPS клиент никак не проверяет, что общается с настоящим сервером. TCP-соединение гарантирует доставку пакетов по верному IP, но не проверяет, что IP действительно принадлежит банку, а не атакующему.

Три свойства защищённого соединения

HTTPS добавляет к HTTP три критических свойства, которые вместе называют CIA-триадой безопасности (Confidentiality, Integrity, Authenticity):

  1. Конфиденциальность (Confidentiality). Данные зашифрованы. Даже если пакеты перехвачены, прочитать их нельзя. Провайдер видит только IP-адреса и порты, но не содержимое запросов и ответов.
  2. Целостность (Integrity). Данные нельзя незаметно изменить в пути. HTTPS гарантирует, что ответ пришёл ровно в том виде, в котором сервер его отправил.
  3. Аутентичность (Authenticity). Клиент уверен, что общается с настоящим сервером. Сертификат, подписанный доверенным центром сертификации, подтверждает, что bank.example.com действительно принадлежит банку, а не атакующему.

HTTPS = HTTP + TLS

HTTPS — это не отдельный протокол, а HTTP, работающий поверх TLS (Transport Layer Security). Старое название TLS — SSL (Secure Sockets Layer), поэтому термины часто взаимозаменяемы, но SSL — это устаревший предшественник, а TLS — современный стандарт:

HTTP (обычный):   HTTP → TCP → IP
HTTPS (TLS 1.3):  HTTP → TLS → TCP → IP
HTTPS (HTTP/3):   HTTP → QUIC (TLS 1.3 внутри) → UDP → IP

TLS располагается между HTTP и TCP: HTTP формирует запрос, TLS шифрует его, TCP разбивает на пакеты и отправляет. Для HTTP-приложения работа через TLS прозрачна — оно пишет обычные HTTP-сообщения, а шифрование происходит на уровень ниже.

Почему до сих пор не всё на HTTPS

Ещё в 2015 году HTTPS был редкостью для некритичных сайтов — блоги, новости, форумы работали на HTTP. Проблемы были:

  • Сертификаты стоили денег. До появления Let's Encrypt в 2016 году TLS-сертификат нужно было покупать у центра сертификации за $50–200 в год.
  • Настройка требовала знаний. Нужно было вручную генерировать ключи, настраивать веб-сервер, обновлять сертификаты до истечения.
  • Производительность. Ранние версии TLS добавляли два round-trip к рукопожатию, что на медленных соединениях было заметно.

Сегодня эти проблемы решены: Let's Encrypt выдаёт сертификаты бесплатно и автоматически, Certbot и acme.sh автоматизируют обновление, а TLS 1.3 сократил рукопожатие до одного round-trip. Современный веб на 90%+ работает по HTTPS.

Атака SSL Stripping: как обходят HTTPS

SSL Stripping — атака, при которой злоумышленник не даёт пользователю перейти на HTTPS. Находясь между клиентом и сервером (MITM), атакующий:

  1. Перехватывает HTTP-запрос пользователя к example.com.
  2. Сам устанавливает HTTPS-соединение с example.com (выступая как клиент).
  3. Пользователю возвращает ответы по HTTP, снимая шифрование.

Пользователь видит обычный сайт без замка, атакующий читает все данные. Защита от этого — HSTS (разберём в уроке 7-5), который заставляет браузер всегда использовать HTTPS.

Что шифрует HTTPS, а что нет

HTTPS шифрует содержимое HTTP-сообщений: URL после домена, заголовки, тело. Но метаданные, необходимые для маршрутизации, остаются видны:

Видно провайдеру:                  IP-адрес сервера (93.184.216.34)
                                   Порт (443 = HTTPS)
                                   Домен через SNI (example.com)
                                   Размер и время пакетов

Не видно провайдеру:               Полный URL (/login?user=ivan)
                                   Заголовки (Cookie, User-Agent)
                                   Тело запроса и ответа

Сам факт того, что ты зашёл на example.com, скрыть нельзя — IP-пакеты должны дойти до сервера. Но что именно ты там делал — надёжно скрыто.

Как узнать, что сайт на HTTPS

Браузер показывает замок в адресной строке рядом с URL. Замок означает: соединение зашифровано, сертификат проверен, данные защищены от перехвата. Отсутствие замка — браузер покажет предупреждение «Not secure» или вовсе не откроет сайт.

Проверь себя

  1. Какие три свойства даёт HTTPS по сравнению с HTTP?
  2. Может ли провайдер прочитать содержимое HTTPS-запроса?
  3. Почему в 2016 году произошёл массовый переход на HTTPS?
<details> <summary>Ответы</summary>
  1. Конфиденциальность (шифрование), целостность (защита от изменений), аутентичность (проверка подлинности сервера).
  2. Нет. Провайдер видит IP-адреса и порты, но содержимое запросов и ответов зашифровано TLS.
  3. Let's Encrypt запустил бесплатные сертификаты и автоматизированное обновление, убрав финансовый и технический барьеры.
</details>

Что унести с урока

  • HTTP передаёт данные открытым текстом — любой в цепочке сети может их прочитать.
  • Man-in-the-Middle на HTTP позволяет не только читать, но и изменять трафик.
  • HTTPS = HTTP + TLS. Добавляет конфиденциальность, целостность и аутентичность.
  • Let's Encrypt и TLS 1.3 сделали HTTPS стандартом, а не опцией.

В следующем уроке разберём, как работает TLS/SSL — симметричное и асимметричное шифрование, обмен ключами и почему гибридный подход самый эффективный.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике