Почему CGi-скрипты не читают заголовки из STDIN

316
xaxa

После недавних уязвимостей, связанных с CGI, я прочитал немного об этом и у меня есть вопрос. Обратите внимание, что я никогда не использовал CGI сам и не пишу код на PHP или Perl, так что, может быть, что-то очевидное, что мне не хватает.

Как я понимаю, сообщение ответа должно быть написано сценарием к STDOUT, включая оба заголовки и тело. Почему бы тогда не прочитать все сообщение запроса из STDIN, включая заголовки и тело? Почему заголовки удаляются и назначаются вместо переменных среды?

0

1 ответ на вопрос

0
Adrien

Ответные сообщения для Stdout содержат только любые дополнительные заголовки, которые CGI желает добавить. Они могут быть заменены или изменены веб-службой хоста, прежде чем они будут отправлены клиенту. Также будут добавлены другие заголовки.

Что касается входящих заголовков, то нет никакого смысла возлагать бремя и риск их анализа на CGI. Ошибки разбора создают всевозможные уязвимости. Хост веб-сервера - лучшая вещь для этого.

Однако с FastCGI все по-другому, поскольку переменные среды больше не доступны, поскольку процесс CGI остается резидентным.

Я имею в виду, что разбор входящего сообщения должен выполняться конечной программой (написанной на C, Perl или чем-то еще). Как это менее безопасно, чем установка переменных среды? xaxa 8 лет назад 0
причина в том, что каждый отдельный CGI должен иметь свой собственный код парсера для этого. С серверной точки зрения лучше, если он выполняет сам синтаксический анализ, тогда он не открывает себя для эксплойтов плохо написанных CGI с ошибками синтаксического анализа. Adrien 8 лет назад 0
И, кстати, разбор тела POST оставлен самой программе, так что, если он все равно анализирует тело, почему бы не проанализировать все сообщение xaxa 8 лет назад 0
это правда, но есть и проблема наследства. Интерфейс CGI позволяет хосту анализировать заголовки. Вам пришлось бы управлять проблемами совместимости, если бы вы заставили CGI анализировать заголовки запросов. Мое мнение об отправляемых заголовках ответа также уместно. Сценарий может сломать много вещей (кадрирование и т. Д.), Испуская плохие заголовки. Сервер всегда будет иметь возможность проверять отправленные заголовки, и сервер несет ответственность за то, чтобы ответ был правильно сформирован и содержал все необходимые заголовки, которые могли быть опущены сценарием. Adrien 8 лет назад 0

Похожие вопросы