Nginx: solicitud de origen cruzado bloqueada

Nginx: solicitud de origen cruzado bloqueada

Recibimos este error:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://stats.g.doubleclick.net

En nuestra configuración de nginx tenemos:

add_header X-Frame-Options SAMEORIGIN always;
add_header X-Xss-Protection "1; mode=block" always;
add_header X-Content-Type-Options nosniff always;
add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';" always;
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";

No estoy seguro de la directiva y su sintaxis sobre cómo permitir solo doubleclick.netnuestro propio dominio.

Respuesta1

Dentro de location(con una proxy_passdirectiva por ejemplo) puedes generar los encabezados correctos dinámicamente:

        if ($http_origin ~ '^(?:https?://)?(?:[a-z0-9_.-]+\.)?(?:doubleclick\.net|example\.com)$')
        {
            more_set_headers 'Access-Control-Allow-Origin: $http_origin';
            more_set_headers 'Access-Control-Allow-Methods: GET, OPTIONS, POST';
        }

Pregunte si no comprende las expresiones regulares.

Puedes reemplazarlo more_set_headerscon add_headersi no tienes Ubuntu, nginx-extraspor ejemplo. Tenga en cuenta la sintaxis ligeramente diferente.

Esta solución es lo suficientemente segura para ese propósito. Hasta donde yo sé, no es tan fácil falsificar el encabezado de origen en un navegador estándar. Con curlpuedes (probarlo):

curl -H 'Origin: https://example.com' -I -L 'https://example.com' 2>/dev/null | grep -i access-control

Y:

curl -H 'Origin: https://stats.g.doubleclick.net' -I -L 'https://example.com' 2>/dev/null | grep -i access-control

Ambos deberían devolver dos access-controlencabezados. No probado.

información relacionada