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

Бесплатная проверка навыков Claude на наличие уязвимостей безопасности
Разработчик создал бесплатный навык Claude, предназначенный для проверки безопасности других навыков Claude. Инструмент помогает ответить на вопрос, выглядит ли конкретный навык Claude достаточно безопасным для использования, проверяя код на наличие потенциально вредоносного поведения и анализируя репозитории с помощью подхода, напоминающего систему оценок.

Правила Когтя: Набор правил безопасности с открытым исходным кодом для агентов OpenClaw
Открытый набор правил JSON с 139 правилами безопасности, который блокирует деструктивные команды, защищает файлы с учетными данными и оберегает инструкционные файлы от несанкционированных изменений агентами. Работает без зависимости от LLM, используя регулярные выражения на уровне инструментов.

ИИ разрушает две культуры уязвимостей: скоординированное раскрытие против принципа Linux «Ошибки есть ошибки»
Джефф Кауфман анализирует, как обнаружение уязвимостей с помощью ИИ разрушает как скоординированное раскрытие, так и культуру тихих исправлений в Linux, на примере недавней уязвимости Copy Fail (ESP).

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