500 servidor interno - AH02429: nome do cabeçalho de resposta

4

OS Ubuntu Ubuntu 16.04.2 LTS Apache / 2.4.18 Perl v5.22.1

Então eu tenho código perl que lê um banco de dados mysql e, em seguida, cria uma página da web dinâmica. O código tem funcionado bem por anos. Uma semana atrás, meu cliente liga e diz que está recebendo uma mensagem interna do servidor 500. Eu dou uma olhada e tudo parece bem, mas quando eu tento carregar a página, recebo 500 erro. No log de erros do apache, há esse erro:

[Tue May 30 22:16:13.144199 2017] [http:error] [pid 12487] [client 99.99.99.99:55628] AH02429: Response header name '<!-- warning' contains invalid characters, aborting request

Alguém viu isso, ou tem alguma ideia do que está causando isso?

    
por user3640899 31.05.2017 / 00:28

3 respostas

5

Você tem um cabeçalho de chave com caracteres inválidos, não foi um problema até a correção de segurança CVE-2016-8743.

link

No meu caso, eraApache + PHP e um espaço em branco antes de ":" como "X-CUSTOM-KEY:" e não encontrei outra solução além de alterar o cabeçalho.

    
por 31.05.2017 / 10:00
1

Como o @GroGz diz, este problema é quase certamente causado (ou melhor, exposto) pela correção para CVE-2016-8743 - a análise de cabeçalhos HTTP foi feita muito mais rigorosa em uma atualização para o Apache lançada em 20 de dezembro de 2016 ( detalhes no link ). É provável que seu script Perl use o módulo CGI::Carp , que inclui uma sub-rotina "warningsToBrowser". Esta sub-rotina coloca avisos desencadeados por problemas de código em comentários HTML embutidos na saída do seu programa, em vez de apenas registrá-los nos logs HTTPD. Esta sub-rotina é acionada da seguinte forma:

warningsToBrowser(1);

Se você acioná-lo antes que os cabeçalhos HTTP sejam enviados na íntegra, você verá um erro semelhante ao que você descreveu.

A solução fácil é procurar em seu código por qualquer ocorrência de:

warningsToBrowser(1);

e altere para:

warningsToBrowser(0);

Com isso, as mensagens de aviso só serão enviadas para STDERR (como a maioria dos servidores HTTPD, o Apache direcionará STDERR para o log de erros do servidor). Já que você diz "o código tem funcionado muito bem por anos" é provável que os avisos não sejam muito sérios. Confira o link para obter mais informações .

    
por 24.11.2017 / 02:41
-1

O problema resulta de uma lista de cabeçalhos vazia que aparece no symfony 1.4 como

array(1) {
 [""] => string(9) "text/html"
}

O problema pode ser corrigido alterando a linha 357 em lib / response / sfWebResponse.class.php para

foreach ($this->headers as $name => $value)
{
  if($name === "")
    $name = "Content-type";

  header($name.': '.$value);

  [...]

Na verdade, não sei por que nenhum nome próprio foi definido, mas o projeto é muito antigo para entrar no framework.

    
por 03.01.2018 / 16:57