Encabezados
General
Los encabezados desempeñan un papel importante en la seguridad, ayudando a reducir la superficie de ataque de varios tipos en una aplicación web.
Estos encabezados se utilizan en la mayoría de las aplicaciones web modernas, ya que proporcionan un nivel básico de protección contra las vulnerabilidades más comunes.
Passwork Docker Build
Los encabezados de seguridad comunes se incluyen mediante la directiva include en el archivo de configuración principal de Nginx y están definidos en el archivo extra/security-headers.conf. El encabezado Strict-Transport-Security se establece directamente en el archivo de configuración principal y, por lo tanto, se aplica a todo el sitio.
| Header | Value |
|---|---|
| X-Frame-Options | "DENY" |
| X-Content-Type-Options | "nosniff" |
| X-XSS-Protection | "1; mode=block" |
| Referrer-Policy | "strict-origin-when-cross-origin" |
| Permissions-Policy | "camera=(), microphone=(), geolocation=()" |
| Strict-Transport-Security | "max-age=31536000; includeSubDomains" |
Apache2\HTTPD
Los encabezados comunes están contenidos en public/.htaccess. Se aplican automáticamente siempre que el procesamiento de archivos .htaccess no haya sido deshabilitado en la configuración de Apache. El encabezado Strict-Transport-Security se especifica en los ejemplos de configuración de las instrucciones de instalación.
| Header | Value |
|---|---|
| X-Frame-Options | "DENY" |
| X-Content-Type-Options | "nosniff" |
| X-XSS-Protection | "1; mode=block" |
| Referrer-Policy | "strict-origin-when-cross-origin" |
| Permissions-Policy | "camera=(), microphone=(), geolocation=()" |
| Strict-Transport-Security | "max-age=31536000; includeSubDomains" |
X-Frame-Options — Define si la página puede cargarse en un frame, iframe u objeto.
X-Content-Type-Options — Evita que los navegadores intenten adivinar el tipo de contenido.
X-XSS-Protection — Habilita (o deshabilita) la protección XSS integrada en versiones antiguas de navegadores. Obsoleto, pero puede usarse por compatibilidad.
Referrer-Policy — Define qué información envía el navegador en el encabezado Referer.
Permissions-Policy — Permite restringir el uso de varias funcionalidades, por ejemplo: acceso a cámara, micrófono, geolocalización y otras APIs.
Strict-Transport-Security — Informa al navegador que el sitio debe cargarse solo a través de HTTPS, previniendo ataques de degradación y MITM.
Cross-Origin Resource Sharing
Los encabezados CORS regulan el acceso a los recursos del sitio desde otros dominios.
En la mayoría de los casos, no es necesario cambiar ni añadir encabezados CORS. Solo son necesarios cuando el frontend y el backend están alojados en orígenes diferentes, es decir, difieren en dominio, puerto o protocolo.
Passwork Docker Build
Los encabezados CORS se incluyen mediante la directiva include en el archivo de configuración principal de Nginx y están definidos en el archivo extra/cors.conf.
| Header | Value |
|---|---|
| Access-Control-Allow-Origin | "*" |
| Access-Control-Allow-Methods | "GET,HEAD,OPTIONS,POST,PUT,PATCH,DELETE" |
| Access-Control-Allow-Headers | "Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Browser-Mode, X-Master-Key-Hash, X-CSRF-Token" |
| Access-Control-Max-Age | "1728000" |
| Vary | "Origin" |
Apache2\HTTPD
Los encabezados CORS no se establecen de forma predeterminada. Si es necesario, pueden establecerse explícitamente en la configuración del host virtual de Apache2, dentro de un bloque <Directory> o globalmente para todo el host virtual.
| Header | Value |
|---|---|
| Access-Control-Allow-Origin | "*" |
| Access-Control-Allow-Methods | "GET,HEAD,OPTIONS,POST,PUT,PATCH,DELETE" |
| Access-Control-Allow-Headers | "Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Browser-Mode, X-Master-Key-Hash, X-CSRF-Token" |
| Access-Control-Max-Age | "1728000" |
| Vary | "Origin" |
Access-Control-Allow-Origin — Especifica qué dominios pueden realizar solicitudes al recurso. Admite los siguientes valores:
- Solicitudes desde cualquier dominio permitidas —
* - Valor exacto, esquema + dominio —
https://example.com
No se admite especificar múltiples dominios separados por comas según el estándar CORS y causará un error. El uso de múltiples dominios y otros escenarios dinámicos se implementa a nivel del servidor web:
Docker Build
Reemplace la siguiente línea en el archivo de configuración ./conf/nginx/extra/cors.conf con las líneas a continuación, especificando sus propios dominios u otro patrón:
add_header Access-Control-Allow-Origin "*" always;
- Part of cors.conf configuration file
if ($http_origin ~* ^https?://(example\.com|another\.com)$) {
add_header Access-Control-Allow-Origin "$http_origin" always;
add_header Access-Control-Allow-Credentials "true" always;
}
Apache2/HTTPD
Añada el siguiente bloque al archivo de configuración del host virtual:
- Part of Apache2 virtual host configuration file
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(example\.com|another\.com)$" ORIGIN_ALLOWED=$0
Header always set Access-Control-Allow-Origin "%{ORIGIN_ALLOWED}e" env=ORIGIN_ALLOWED
Header always set Access-Control-Allow-Credentials "true" env=ORIGIN_ALLOWED
Header always set Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS" env=ORIGIN_ALLOWED
Header always set Access-Control-Allow-Headers "Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Browser-Mode, X-Master-Key-Hash, X-CSRF-Token" env=ORIGIN_ALLOWED
Header always set Access-Control-Max-Age "1728000" env=ORIGIN_ALLOWED
Header always set Vary "Origin" env=ORIGIN_ALLOWED
</IfModule>
Access-Control-Allow-Methods — Define qué métodos HTTP están permitidos para solicitudes entre dominios.
Access-Control-Allow-Headers — Especifica qué encabezados pueden enviarse en solicitudes entre dominios.
Access-Control-Max-Age — Tiempo (en segundos) durante el cual el navegador puede almacenar en caché el resultado de una solicitud preflight para evitar realizarla cada vez.
Vary — En el contexto de CORS, se utiliza para el manejo correcto de solicitudes en CDNs y proxies. Permite manejar correctamente diferentes solicitudes de Origin y almacenarlas en caché por separado.