nginx devuelve 404 si el parámetro de consulta contiene un carácter especial '

nginx devuelve 404 si el parámetro de consulta contiene un carácter especial '

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 locationbloque:

if ($err404) {
   return 404;
}

En el httpbloque (¡no dentro del serverbloque!):

map $args $err404 {
        ~param=.*(%3C|%3E).*            1;
        default                         0;
}

información relacionada