Pare o Apache da decodificação de caracteres do URI para PATH_INFO

2

Eu quero impedir que o Apache decodifique %2B ( + ) e %3D ( = ) do URI. Eu preciso desses caracteres não decodificados em PATH_INFO.

Eu fiz isso para %2F ( / ) usando:

AllowEncodedSlashes NoDecode

Mas não consigo encontrar diretivas que possam me ajudar a fazer o mesmo com outros caracteres codificados. Isso é possível?

    
por Jakov Sosic 02.06.2018 / 02:22

1 resposta

1

Você não pode impedir que o Apache decodifique esses caracteres codificados em% na variável de servidor PATH_INFO do Apache (que o PHP atribui posteriormente ao $_SERVER['PATH_INFO'] superglobal, aparentemente inalterado).

A diretiva AllowEncodedSlashes é um caso especial. Este é realmente um "recurso de segurança". Por padrão, uma barra codificada ( %2F ) na parte do caminho da URL aciona uma resposta 404 gerada pelo sistema . A diretiva AllowEncodedSlashes permite que a solicitação passe para o aplicativo (a opção NoDecode foi adicionada somente depois).

Se você quiser ler% -ocoded PATH_INFO no PHP, considere o uso de uma variável $_SERVER diferente, como $_SERVER['REQUEST_URI'] , que não é% -decoded, mas isso exigirá uma análise adicional. (Observe que o PHP superglobal $_SERVER['REQUEST_URI'] é diferente da variável do servidor Apache com o mesmo nome, que é% -decoded e pode se referir a uma URL diferente inteiramente se a URL estiver sendo reescrita!)

No entanto, se você quiser ler% -ocoded PATH_INFO com o Apache (usando mod_rewrite), considere analisar a variável THE_REQUEST server, que contém todo o cabeçalho da solicitação, conforme enviado pelo cliente. Esta variável não é% -decoded. Isso poderia ser atribuído a uma variável de ambiente ou até mesmo a um parâmetro de URL e lido pelo PHP dessa maneira. (Observe que a variável QUERY_STRING server e o correspondente $_SERVER['QUERY_STRING'] superglobal não são decodificados em%, mas o PHP decodifica os valores dos parâmetros individuais no array $_GET .)

    
por 02.06.2018 / 03:05