Почему скрипты CGi не читают заголовки из STDIN
После недавних уязвимостей, связанных с CGI, я прочитал немного об этом и у меня есть вопрос. Обратите внимание, что я никогда не использовал CGI сам и не пишу код на PHP или Perl, так что, может быть, что-то очевидное, что мне не хватает.
Как я понимаю, ответное сообщение должно быть записано сценарием в STDOUT, включая заголовки и тело. Почему бы тогда не прочитать все сообщение запроса из STDIN, включая заголовки и тело? Почему заголовки удаляются и назначаются вместо переменных среды?
1 ответ
Ответные сообщения на стандартный вывод содержат только дополнительные заголовки, которые CGI желает добавить. Они могут быть заменены или изменены веб-службой хоста, прежде чем они будут отправлены клиенту. Также будут добавлены другие заголовки.
Что касается входящих заголовков, то абсолютно бессмысленно возлагать бремя и риск их разбора на CGI. Ошибки разбора создают всевозможные уязвимости. Хост веб-сервера - лучшая вещь для этого.
Однако с FastCGI все по-другому, поскольку переменные среды больше не доступны, поскольку процесс CGI остается резидентным.