ОС Ubuntu Ubuntu 16.04.2 LTS Apache / 2.4.18 Perl v5.22.1
Итак, у меня есть код на Perl, который читает базу данных mysql, а затем создает динамическую веб-страницу. Код отлично работает годами. Неделю назад мой клиент звонит и говорит, что получает сообщение внутреннего сервера 500. Я смотрю, все в порядке, но когда я пытаюсь загрузить страницу, я получаю ошибку 500. В журнале ошибок apache есть такая ошибка:
[Вт, 30 мая, 22:16: 13.144199 2017] [http: error] [pid 12487] [client 99.99.99.99:55628] AH02429: Имя заголовка ответа «
Кто-нибудь видел это или имеет какое-либо представление о причинах этого?
Как говорит @GroGz, эта проблема почти наверняка вызвана (или, скорее, обнаружена ) путем исправления CVE-2016-8743 - синтаксический анализ заголовков HTTP стал намного более строгим в обновлении Apache, выпущенном 20 декабря 2016 г. (подробности на https://httpd.apache.org/security/vulnerabilities_24 .html ). Скорее всего, ваш сценарий Perl использует модуль CGI :: Carp
, который включает подпрограмму «warningsToBrowser». Эта подпрограмма помещает предупреждения, вызванные проблемами кода, в комментарии HTML, встроенные в выходные данные вашей программы, а не просто записывает их в журналы HTTPD. Эта подпрограмма запускается следующим образом:
warningsToBrowser(1);
Если вы запускаете ее до того, как заголовки HTTP будут отправлены полностью, вы увидите ошибку, аналогичную описанной вами.
Простое исправление - поиск любого вхождения в вашем коде of:
warningsToBrowser(1);
и измените его на:
warningsToBrowser(0);
При этом предупреждающие сообщения будут отправляться только на STDERR (как и большинство серверов HTTPD, Apache направит STDERR в журнал ошибок сервера). Поскольку вы говорите «код отлично работает в течение многих лет», вероятно, предупреждения в любом случае не слишком серьезны. См. http://perldoc.perl.org/5.8.9/CGI/Carp.html#MAKING-WARNINGS-APPEAR-AS-HTML-COMMENTS для получения дополнительной информации.
Проблема возникает из-за пустого списка заголовков, который в symfony 1.4 выглядит как
array(1) {
[""] => string(9) "text/html"
}
. Проблема может быть решена путем изменения строки 357 в lib / response / sfWebResponse.class.php на
foreach ($this->headers as $name => $value)
{
if($name === "")
$name = "Content-type";
header($name.': '.$value);
[...]
На самом деле я не знаю, почему не задано собственное имя, но проект слишком стар, чтобы копаться в структуре.
У вас есть заголовок ключа с недействительными символами, это не было проблемой до тех пор, пока не было исправлено состояние безопасности CVE-2016-8743.
https://blog.tigertech.net/posts/apache-cve-2016-8743/
В моем случае былApache + PHP и пробел до ":" типа "X-CUSTOM-KEY :", и я не нашел другого решения, кроме как изменить заголовок.
. У меня была эта проблема с некорректным Java-приложением, которое возвращало «Местоположение: http://foo.bar \ n» (обратите внимание, что \ n
в конце).
У меня не было доступа к исходному коду приложения для решения проблемы, поэтому мне пришлось найти обходной путь, сказав apache исправить заголовки с помощью mod_header
Решение было:
Header edit Location "\n$" ""
Я провел несколько тестов, создал приложение, возвращающее заголовок , и решил его на apache с помощью следующей директивы:
Header always unset "<!-- warning"
Если вы не можете исправить приложение, apache может удалить / исправить заголовок за вас.