Nginx: ¿Cómo devolver 404 si hay encabezados de autenticación presentes?

Nginx: ¿Cómo devolver 404 si hay encabezados de autenticación presentes?

Tengo una instancia de nginx en Internet que representa una aplicación. Me gustaría devolver 404 en cualquier solicitud de Internet que intente autenticarse en la aplicación, ya que todas las partes públicas permiten el acceso anónimo. Sólo los usuarios de la red local deberían poder autenticarse en ella.

Me imagino que puedo usar un bloque if simple, ya que solo estoy usando el retorno 404, pero no estoy seguro de cuál es la condición if más confiable para detectar la presencia de encabezados de autenticación:

if (auth headers exist) {
  return 404;
}

¿Alguien tiene sugerencias sobre lo que puedo poner en el bloque if para comprobar esto?

Respuesta1

En general, no se recomiendan las declaraciones, o al menos se debe tener en cuenta algunos de los efectos secundarios. Leer"If is Evil" en el blog de nginxaprender más.

Para responder a su pregunta: suponiendo que el encabezado que desea verificar se llama "Autorización", su suposición inicial ya era muy precisa.

if ($authorization) {
    return 404;
}

Eso ya debería funcionar. Además, si desea aplicar esto solo para el bloque del servidor público, puede usar elngx_http_access_module

Respuesta2

Puede verificar la presencia del encabezado Autorización en la solicitud, que generalmente se usa para autenticar solicitudes. Puedes hacer esto usando la variable $http_authorization en el bloque if:

if ($http_authorization) {
  return 404;
}

Alternativamente, puede verificar la presencia de encabezados de autenticación específicos que utiliza su aplicación. Por ejemplo, si su aplicación usa X-Auth-Token como encabezado de autenticación, puede verificarlo de esta manera:

if ($http_x_auth_token) {
  return 404;
}

Recuerde que el bloque if solo se evaluará si la solicitud se realiza a una ubicación protegida por la directiva auth_basic. Si desea verificar la presencia de encabezados de autenticación en todas las solicitudes, puede usar la directiva map en su lugar:

map $http_authorization $block_public_auth {
  default 0;
  "~" 1;
}

server {
  ...

  location / {
    if ($block_public_auth) {
      return 404;
    }

    ...
  }
}

Lo anterior bloqueará todas las solicitudes con un encabezado de Autorización, independientemente de la ubicación en la que se realice.

información relacionada