Más notícias! mod_headers in 2.0.59 não parece brincar com variáveis de ambiente em seu código de validação.
Ele analisa assim:
RequestHeader {action} {inhdr} {value} {envclause}
Para unset
, 2.0.59 valida assim, descartando uma diretiva se ela tiver um terceiro argumento ( value
) após o nome da diretiva:
if (new->action == hdr_unset) {
if (value)
return "header unset takes two arguments";
}
Portanto, RequestHeader unset Range
funciona e RequestHeader unset Range bytes=0-1000
quebra conforme pretendido, mas RequestHeader unset Range env=bad-range
também quebra.
Alguém descobriu isso em algum lugar ao longo da linha, e as versões atuais fazem isso, em vez disso - colocando os argumentos onde eles pertencem:
if (new->action == hdr_unset) {
if (value) {
if (envclause) {
return "header unset takes two arguments";
}
envclause = value;
value = NULL;
}
}
Então, ele ainda está analisando o envclause
na value
position, mas como unset não recebe um valor, ele se reorganiza de acordo. Então, agora, RequestHeader unset Range env=bad-range
funciona, mas RequestHeader unset Range bytes=0-1000 env=bad-range
ainda lança um erro de validação .. e RequestHeader unset Range bytes=0-1000
provavelmente explode em tempo de execução.
Para consertar, não faltam opções ruins - corrigir e recompilar mod_headers para funcionar corretamente é uma opção, ou apenas atualizar o Apache. Mas, pode valer a pena tentar esvaziar o cabeçalho com set
(sem erros de validação), em vez de usar unset
:
RequestHeader set Range "badrange" env=bad-range
No Apache 2.2 que eu verifiquei, os dados indesejados no campo "Range" serão simplesmente ignorados; em essência, um eficaz unset.