Apache retornando 404 se pathinfo incluir parcialmente o URL codificado por URI

1

(Uau, esse título é uma merda ... Sinta-se à vontade para fazer uma sugestão nos comentários ou editá-la se tiver uma melhor.)

Eu tenho um servidor com um programa CGI que recebe um URL como pathinfo, verifica o endereço IP do usuário e redireciona-o para ir diretamente para esse URL (se ele é interno à nossa organização) ou enviá-lo para o URL através de um proxy (se eles são externos). O próprio CGI funciona muito bem, mas existem algumas URLs para as quais o apache retorna um erro 404 Not Found em vez de invocar o script. Parece que isso está relacionado ao URL de destino que contém um caminho codificado por URI. por exemplo,

link

retorna 404, enquanto

link

(o mesmo URL, mas com o %2F decodificado para um / ) funciona corretamente.

Eu verifiquei (enviando para error_log na inicialização) que, quando 404 é retornado, o script ipchk não está sendo iniciado. Esses erros estão definitivamente vindo do próprio apache e não resultantes do script redirecionando os usuários para uma URL inexistente.

Por que a codificação da URL pathinfo afeta a capacidade do apache de localizar o script ipchk e o que preciso fazer para que ele passe all /cgi-bin/ipchk/ URIs para ipchk , independentemente de o que pode acontecer depois?

    
por Dave Sherohman 02.01.2012 / 14:45

1 resposta

3

Como parte de uma tentativa de proteger os usuários do código CGI que não decodifica os dados adequadamente antes de verificar os caminhos de entrada, o Apache rejeita (como 404 Não encontrado) URLs contendo as formas codificadas por URI de barras ( %2F ) ou barras invertidas ( %5C ), como explicado em este artigo .

Para ignorar essa verificação, você deve estar usando o apache 2.0.46 ou posterior e ativar as AllowEncodedSlashes diretiva na configuração do apache. (Esta diretiva não funciona a partir de .htaccess ; só é permitida no contexto do servidor ou do host virtual.)

    
por 10.01.2012 / 15:30