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
👀 Смотрите также

Агент ИИ использует SQL-инъекцию для взлома чат-бота McKinsey Lilli
Исследователи безопасности из CodeWall использовали автономного ИИ-агента для взлома внутреннего чат-бота Lilli компании McKinsey, получив полный доступ на чтение и запись к его производственной базе данных за два часа через уязвимость SQL-инъекции в незащищённых API-эндпоинтах.

Не доверяйте ИИ больше, чем человеку — применяйте те же средства контроля доступа
В обсуждении на Reddit утверждается, что ИИ-агентов для программирования следует рассматривать как младших разработчиков — без доступа к продакшену, без прямых прав на запись, с обязательными CI/CD пайплайнами и разграничением ролей.

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

Агентский паспорт: Проверка身份 для ИИ-агентов
Agent Passport — это открытый слой проверки личности, использующий аутентификацию Ed25519 и токены JWT для ИИ-агентов, который решает проблему impersonating (выдачи себя за другого).