← Назад к вопросам
Какой знаешь способ защиты от 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 + проверка сертификатов — это минимум, который должна иметь каждое приложение.