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


0

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

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

Ответы:


0

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

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

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


Я имею в виду, что разбор входящего сообщения должен выполняться конечной программой (написанной на C, Perl или чем-то еще). Как это менее безопасно, чем установка переменных среды?
xaxa

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

И, между прочим, разбор тела POST оставлен самой программе, так что, если он все равно анализирует тело, почему бы не проанализировать все сообщение
xaxa

это правда, но есть и проблема наследства. Интерфейс CGI позволяет хосту анализировать заголовки. Вам пришлось бы управлять проблемами совместимости, если бы вы заставили CGI анализировать заголовки запросов. Мое мнение об отправляемых заголовках ответа также уместно. Сценарий может сломать много вещей (кадрирование и т. Д.), Испуская плохие заголовки. Сервер всегда будет иметь возможность проверять выданные заголовки, и сервер несет ответственность за то, чтобы ответ был правильно сформирован и содержал все необходимые заголовки, которые могли быть опущены сценарием.
Адриен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.