Saltar a contenido

Frontend

Es imprescindible para nuestras aplicaciones frontend tengan las mejores prácticas alíneadas con CyberSeguridad por lo que habilitamos una imagen de Docker que viene con los templates la cual permite ciertas configuraciones.

  • Habilitar las configuraciones siempre optando por la más restrictiva
  • Utilizar las variables de entorno para configurar el comportamiento de nginx según la necesidad. (No necesita un build son configuraciones dinamicas en runtime)

Actualmente disponemos de las siguientes variables de entorno asociadas a temas de seguridad para nginx

Se pueden configurar a nivel Dockerfile o a nivel variable de entorno

Es decir se puede agregar en el Dockerfile como en el ejemplo de abajo, o se pueden agregar directamente a los n archivos: value-<ENTORNO>.yml

## ...Ignoramos el resto del archivo por brevedad
env:
    # Definición de Variabless
    normal:
        NGINX_FRAME_ANCESTORS: "'self' https://www.example.com"
## ...Ignoramos el resto del archivo por brevedad
Variable Descripción Default
NGINX_RUNTIME_ENV_PREFIX Prefijo con el que se cargan las variables internamente (para inyectar en el HTML). Tomar en cuenta que debe terminar en _ REACT_APP_
NGINX_CACHE_DURATION_ASSETS Duración del cache para archivos estáticos (svg|css|js) excepto __ENV.js y remoteEntry.js. * 6M
NGINX_CACHE_DURATION_IMAGES Duración del cache para imágenes (jpg|jpeg|png|gif|ico) * 6M
NGINX_FRAME_ANCESTORS Permite consumir como iframe. Sintaxis. No recomendamos está opción, sería para casos muy puntuales. "'self'"
NGINX_ORIGIN_CORS_1 Permite cors origin. Cualquier variable que tenga el prefijo NGINX_ORIGIN_CORS_ será tomada y agregada al map que usa internamente para habilitar cors. Permite configuración mediante Regex ejemplo ~^https?://(www\.)?(localhost:3000)$ Notese que el ~ es necesario
NGINX_ORIGIN_REDIRECT_1 Permite redirección de origen. Cualquier variable que tenga el prefijo NGINX_ORIGIN_REDIRECT_ será tomada y agregada al map que usa internamente para habilitar redirección de origen. Ejemplo: NGINX_ORIGIN_REDIRECT_OTHER=http://other:9000 Va a generar la ruta internamente para que cuando el usuario ingrese en {host}/_internal/other internamente lo redirija a http://other:9000 con los argumentos que se le envíen

* Acepta formato reducido ya que utiliza expires por debajo. Ej: 2d, 3h

Dockerfile
# ...ignorado el resto por brevedad

FROM ghcr.io/architecture-it/nginx:latest

# Configure Nginx caching duration for static assets (svg|css|js) except __ENV.js. Default 6M
ENV NGINX_CACHE_DURATION_ASSETS 1M
# Configure Nginx caching duration for images (jpg|jpeg|png|gif|ico). Default 6M
ENV NGINX_CACHE_DURATION_IMAGES 6M
# Allow consume as iframe https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors#syntax
# always include self in the frame-ancestors directive
ENV NGINX_FRAME_ANCESTORS "'self'"
# Allow cors origin
# this works with regex and compare the http origin (allow only for http or https localhost:3000)
ENV NGINX_ORIGIN_CORS_1 ~^https?://(www\.)?(localhost:3000)$
# We can pass many origins as we want For example allowing any port
# ENV NGINX_ORIGIN_CORS_2 ~^https?://(www\.)?(localhost:\d+)$

COPY --from=builder --chown=nginx:nginx /app/dist .

CMD ["/bin/sh", "-c", "react-env -d ./ -- && nginx -g \"daemon off;\""]

FAQ

Necesita hailitarse el consumo de un iframe de un dominio en específico

Sencillamente tienes que aregar la variable de entorno NGINX_FRAME_ANCESTORS con el dominio que deseas permitir. Ejemplo NGINX_FRAME_ANCESTORS="'self' https://www.example.com"