miércoles, 28 de octubre de 2020

Configurar Content Security Policy en NGINX



Cómo configurar Content-Security-Policy en NGINX..



La "política de Seguridad del Contenido" (del inglés Content Security Policy) es una capa de seguridad que ayuda a prevenir y mitigar algunos ataques como Cross Site Scripting (XSS) usados para robar información de un servidor web o distribuir malware.

La configuración de la Política de Seguridad del Contenido (CSP), consiste en agregar a una página web la cabecera HTTP Content-Security-Policy y darle valores para controlar los recursos que el navegador puede cargar para esa página. Por ejemplo, una página que carga y muestra imágenes podría permitir imágenes desde cualquier lugar, pero puede restringir el envío de un formulario a una ruta específica.

CSP está diseñado para ser completamente retrocompatible; los navegadores que no soportan CSP simplemente lo ignoran. Si el sitio web no ofrece la cabecera CSP, los navegadores igualmente usan la política estándar "mismo-origen".

Para habilitar CSP, necesitas configurar tu servidor web para que devuelva la cabecera HTTP Content-Security-Policy (en ocasiones verás menciones de la cabecera X-Content-Security-Policy, pero se trata de una versión antigua y obsoleta).

Para especificar una política CSP, se puede utilizar la cabecera HTTP Content-Security-Policy de la siguiente manera:

Content-Security-Policy: política; politica2; politica3

La cabecera Content-Security-Policy puede llegar a ser muy larga según si la web tiene muchos orígenes y actualizar esa línea puede llegar a ser tedioso.

En NGINX podemos anidar las variables de esta forma, y tener una URL origen en cada línea, cosa que nos permite una mejor visibilidad del conjunto:

set $SCRIPT "script-src 'self'"; set $SCRIPT "${SCRIPT} https://www.a.com"; # comentario set $SCRIPT "${SCRIPT} https://b.com"; set $STYLE "style-src 'self'"; set $STYLE "${STYLE} https://a.com"; set $IMG "img-src 'self' data:"; set $IMG "${IMG} https://a.com"; set $IMG "${IMG} https://www.b.com"; set $FONT "font-src 'self' data:"; set $FONT "${FONT} https://a.com"; set $DEFAULT "default-src 'self'"; set $CONNECT "connect-src 'self'"; set $CONNECT "${CONNECT} https://www.a.com"; set $CONNECT "${CONNECT} https://www.b.com"; set $FRAME "frame-src 'self'"; set $FRAME "${FRAME} https://a.com"; set $FRAME "${FRAME} https://b.com"; add_header Content-Security-Policy "${SCRIPT}; ${STYLE}; ${IMG}; ${FONT}; ${DEFAULT}; ${CONNECT}; ${FRAME}";


Fuentes:

https://stackoverflow.com/questions/50018881/is-it-ok-to-put-line-breaks-in-add-header-in-nginx...
https://developer.mozilla.org/es/docs/Web/HTTP/CSP
0

0 comentarios:

Publicar un comentario