
eu tenho urlhttps://myhost.test/en/searchResult?param=<
Quero retornar 404 se o parâmetro de consulta tiver caractere especial '<'
https://myhost.test/en/searchResult?param=test ----- Valid url
https://myhost.test/en/searchResult?param=<h1> ----- return 404
Tentei abaixo mas não funcionou
error_page 420 = @blockUrl;
location ~ ^/(en)/search {
if ($args ~* "q=<") {
return 420;
}
}
location @blockUrl{
return 404;
}
Alguém poderia me ajudar como bloquear '<' no parâmetro de consulta.
Responder1
Nos meus testes não importa como eu inseri a url (codificada ou não) ela sempre está codificada no arquivo de log.
Aqui estão duas possibilidades para atender sua exigência:
if ($args ~* (param=.*(%3C|%3E).*)) {
return 404;
}
ou
No seu location
bloco:
if ($err404) {
return 404;
}
No http
bloco (não dentro do server
bloco!):
map $args $err404 {
~param=.*(%3C|%3E).* 1;
default 0;
}