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

Какой знаешь способ защиты от MITM атаки?

1.8 Middle🔥 171 комментариев
#Безопасность

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

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

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

Защита от MITM (Man-in-the-Middle) атак

MITM атака — это перехват коммуникации между клиентом и сервером. Существует несколько проверенных способов защиты от таких атак.

1. HTTPS (TLS/SSL шифрование)

Это основной и наиболее важный способ защиты. HTTPS использует асимметричное и симметричное шифрование для защиты данных в пути:

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# Правильно: HTTPS запросы
response = requests.get("https://api.example.com/data")

# Плохо: HTTP (незащищённые данные)
# response = requests.get("http://api.example.com/data")

В FastAPI:

from fastapi import FastAPI
from starlette.middleware.https import HTTPSMiddleware

app = FastAPI()
app.add_middleware(HTTPSMiddleware)

2. Проверка SSL сертификатов

Убедись, что приложение проверяет сертификаты сервера:

import requests
import certifi

# Правильно: с проверкой сертификата (по умолчанию)
response = requests.get(
    "https://api.example.com/data",
    verify=True
)

# Плохо: отключена проверка сертификата
response = requests.get(
    "https://api.example.com/data",
    verify=False
)

3. Certificate Pinning

Привязка к конкретному сертификату сервера — защита от компрометации центра сертификации:

import requests
from requests.adapters import HTTPAdapter
from urllib3.contrib.pyopenssl import PyOpenSSL

class PinningHTTPAdapter(HTTPAdapter):
    def __init__(self, *args, pinned_certs=None, **kwargs):
        self.pinned_certs = pinned_certs or []
        super().__init__(*args, **kwargs)

session = requests.Session()
adapter = PinningHTTPAdapter(
    pinned_certs=["/path/to/cert.pem"]
)
session.mount("https://", adapter)

4. HSTS (HTTP Strict Transport Security)

Защита от понижения HTTPS до HTTP:

from fastapi import FastAPI
from starlette.middleware.base import BaseHTTPMiddleware

class HSTSMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        response = await call_next(request)
        response.headers["Strict-Transport-Security"] = (
            "max-age=31536000; includeSubDomains; preload"
        )
        return response

5. Проверка целостности данных

Использование хешей и подписей для проверки, что данные не были изменены:

import hmac
import hashlib

def sign_data(data: str, secret_key: str) -> str:
    signature = hmac.new(
        secret_key.encode(),
        data.encode(),
        hashlib.sha256
    ).hexdigest()
    return signature

def verify_signature(data: str, signature: str, secret_key: str) -> bool:
    expected_signature = sign_data(data, secret_key)
    return hmac.compare_digest(signature, expected_signature)

6. Лучшие практики

  • Всегда используй HTTPS в продакшене
  • Никогда не отключай проверку сертификатов
  • Обновляй сертификаты регулярно
  • Используй HSTS для веб-приложений
  • Проверяй целостность данных для критичных операций

HTTPS + проверка сертификатов — это минимум, который должна иметь каждое приложение.

Какой знаешь способ защиты от MITM атаки? | PrepBro