> Что такое MITM (man-in-the-middle) атака и как с ней бороться (Go)
Уровень: junior · Роль: backend · Категория: Технические вопросы
Компании: Юрент
Стек: Go
> Пример ответа
MITM-атака (человек посередине) - это тип кибератаки, при которой злоумышленник тайно перехватывает и, возможно, изменяет передаваемые данные между двумя сторонами (например, клиентом и сервером), оставаясь незамеченным. В контексте бэкенда на Go это может происходить при незащищённых HTTP-соединениях, подмене DNS или ARP-спуфинге.
Методы борьбы с MITM в Go:
- Использование HTTPS/TLS - обязательное шифрование трафика. В Go это реализуется через
http.ListenAndServeTLS()или настройкуtls.Configс валидными сертификатами. Клиент должен проверять сертификат сервера (например, черезtls.Config{InsecureSkipVerify: false}). - Проверка сертификатов - использование публичных CA или собственного CA с корректной цепочкой доверия. Избегать
InsecureSkipVerify: trueв продакшене. - HSTS (HTTP Strict Transport Security) - настройка заголовка
Strict-Transport-Securityв ответе сервера, чтобы браузеры/клиенты использовали только HTTPS. - Certificate Pinning - привязка к конкретному сертификату или его хешу. В Go можно реализовать через кастомный
tls.Config.VerifyPeerCertificate. - Шифрование на уровне приложения - дополнительное шифрование данных (например, с помощью NaCl или AES-GCM) даже поверх TLS, если есть риск компрометации TLS.
- Защита от ARP-спуфинга - на уровне сети (не специфично для Go), но бэкенд может логировать подозрительные IP/MAC.
Пример простой защиты в Go:
GOserver := &http.Server{Addr: ":443",TLSConfig: &tls.Config{MinVersion: tls.VersionTLS12,CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,},},}log.Fatal(server.ListenAndServeTLS("cert.pem", "key.pem"))
Клиентская сторона:
GOtr := &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: false},}client := &http.Client{Transport: tr}
Важно также валидировать входящие данные и использовать подпись запросов (например, HMAC) для дополнительной защиты от подмены.
> Похожие задачи по backend
Напиши SQL запрос для вывода суммы продаж по каждому пользователю, учитывая, что у пользователя может не быть продаж
Расскажите про опыт оптимизации
Что такое дженерики в Go и зачем они нужны
Может ли приложение работать в нескольких процессах?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью