
tengo URLhttps://myhost.test/en/searchResult?param=<
Quiero devolver 404 si el parámetro de consulta tiene un carácter especial '<'
https://myhost.test/en/searchResult?param=test ----- Valid url
https://myhost.test/en/searchResult?param=<h1> ----- return 404
Lo intenté a continuación pero no funcionó.
error_page 420 = @blockUrl;
location ~ ^/(en)/search {
if ($args ~* "q=<") {
return 420;
}
}
location @blockUrl{
return 404;
}
¿Podría alguien ayudarme a bloquear el hecho de tener '<' en el parámetro de consulta?
Respuesta1
En mis pruebas, no importa cómo ingresé la URL (codificada o no), siempre está codificada en el archivo de registro.
Aquí hay dos posibilidades para cumplir con sus requisitos:
if ($args ~* (param=.*(%3C|%3E).*)) {
return 404;
}
o
En tu location
bloque:
if ($err404) {
return 404;
}
En el http
bloque (¡no dentro del server
bloque!):
map $args $err404 {
~param=.*(%3C|%3E).* 1;
default 0;
}