FastCGI: 30 лет, и всё ещё лучший протокол для обратных прокси

В статье утверждается, что HTTP принципиально непригоден для взаимодействия обратного прокси с бэкендом из-за уязвимостей десинхронизации/кражи запросов и проблем с ненадежными заголовками. FastCGI, 30-летний проводной протокол, чисто решает эти проблемы.
Почему HTTP плох для обратных прокси
Атаки десинхронизации / кража запросов: HTTP/1.1 не имеет явной фреймовой структуры сообщений — само сообщение описывает, где оно заканчивается, причем существует несколько неоднозначных способов это сделать. Разные парсеры (прокси и бэкенд) могут по-разному определять границы сообщений, что открывает путь для атак. Джеймс Кеттл, обнаружив очередную партию таких атак в прошлом году, заявил: «HTTP/1.1 должен умереть». HTTP/2 решает эту проблему при последовательном использовании, но внедрение идет медленно: nginx получил поддержку HTTP/2 на бэкенде только в конце 2025 года, а поддержка Apache все еще «экспериментальная».
Ненадежные заголовки: Нет надежного способа передать от прокси к бэкенду доверенную информацию (IP клиента, данные аутентификации, сертификаты mTLS), не смешивая ее с контролируемыми атакующим клиентскими заголовками. Прокси должны тщательно удалять все экземпляры заголовков вроде X-Real-IP перед добавлением своих — легко ошибиться. FastCGI имеет отдельные каналы параметров (например, REMOTE_ADDR, AUTH_TYPE), которые структурно отличаются от данных запроса.
FastCGI: проводной протокол, а не модель процесса
FastCGI можно использовать как HTTP — отправлять запросы через TCP/UNIX-сокеты долгоживущему демону. В Go переключение тривиально:import "net/http/fcgi"
Замените http.Serve(l, handler) на fcgi.Serve(l, handler). Ваш обработчик по-прежнему использует стандартные http.ResponseWriter и http.Request.
Примеры конфигурации прокси
nginx:
# HTTP
proxy_pass http://localhost:8080;
FastCGI
fastcgi_pass localhost:8080;
include fastcgi_params;
Apache:
# HTTP
ProxyPass / http://localhost:8080/
FastCGI
ProxyPass / fcgi://localhost:8080/
Caddy:
# HTTP
reverse_proxy localhost:8080 {
transport http { }
}
FastCGI
reverse_proxy localhost:8080 {
transport fastcgi { }
}
HAProxy:
# HTTP
backend app_backend
server s1 localhost:8080
FastCGI
fcgi-app fcgi_app
docroot /
backend app_backend
use-fcgi-app fcgi_app
server s1 localhost:8080 proto fcgi
Популярные прокси, такие как Apache, Caddy, nginx и HAProxy, поддерживают бэкенды FastCGI с простыми изменениями конфигурации.
Ключевой вывод
FastCGI с 1996 года имеет явную фреймовую структуру сообщений (простой заголовок с длиной содержимого, никакой неоднозначности) и отдельные доверенные каналы параметров. Переход с HTTP на FastCGI между прокси и бэкендом устраняет целый класс уязвимостей без потери функциональности.
📖 Read the full source: HN AI Agents
👀 Смотрите также

Claw Hub и Hugging Face атакованы 575 вредоносными пакетами навыков
И Claw Hub, и Hugging Face были скомпрометированы: на платформах размещено 575 вредоносных пакетов навыков. Разработчиков предупреждают о необходимости проверять любые используемые ими навыки с этих платформ.

McpVanguard: Открытый прокси-сервер безопасности для ИИ-агентов на основе MCP
McpVanguard — это трёхуровневый прокси-сервер безопасности и межсетевой экран, который располагается между ИИ-агентами и инструментами MCP, обеспечивая защиту от инъекций в промпты, обхода путей и других атак с задержкой около 16 мс.

Сандер: Локальный фаервол конфиденциальности на основе Rust для LLM.
Sunder — это расширение для Chrome, которое действует как локальный прививочный экран конфиденциальности для AI-чатов, созданное с использованием Rust и WebAssembly, гарантируя, что конфиденциальные данные никогда не покинут ваш браузер.

Контрольный список безопасности для приложений, созданных с помощью Claude AI
Разработчик делится чек-листом распространенных проблем безопасности и эксплуатации, обнаруженных в приложениях, созданных с помощью Claude Code, включая ограничение скорости запросов, недостатки аутентификации, проблемы с масштабированием баз данных и уязвимости обработки ввода.