
Las empresas que venden cuadros de mandos de seguridad están en aumento, su influencia en las ventas corporativas está creciendo. Además, hay quienes están confundidos por la baja calificación de seguridad de los vendedores, y aquellos que al menos una vez, al mirar la calificación, se negaron a comprar, hablé con esas personas.
Observé cómo estas compañías calculan el desempeño de seguridad de otras compañías. Resultó que estaban buscando una combinación de usar el encabezado HTTP por seguridad y la reputación de las direcciones IP.
La reputación de una dirección IP se basa en la lista negra y los datos de la lista de spammers combinados con información sobre el propietario de la dirección IP pública. En principio, debería estar limpio si su empresa no envía spam y puede identificar rápidamente y detener la implementación maliciosa. El uso del encabezado de seguridad HTTP se calcula de la misma manera que funciona el Observatorio de Mozilla .
Por lo tanto, la calificación de la mayoría de las empresas está determinada principalmente por los títulos incluidos en los sitios web públicos para la seguridad.
Establecer el título correctamente no es largo (no se requiere verificación seria), pero mejorará la seguridad del sitio y ayudará a no perder clientes para quienes la seguridad no es una frase vacía
Dudo del valor de la metodología de verificación mencionada; además, el precio del servicio es exorbitante. Es poco probable que los proveedores de este servicio puedan determinar la seguridad de un recurso con la precisión indicada. Sin embargo, la situación enfatiza una vez más lo importante que es sentarse y tomarse el tiempo para encender y configurar los encabezados correctos.
En este artículo hablaré sobre los encabezados que se verifican con más frecuencia, para cada uno de ellos informaré los valores de seguridad y daré un ejemplo de configuración. Al final daré ejemplos de configuraciones para aplicaciones comunes y servidores web.
Cabeceras de seguridad importantes
Política de seguridad de contenido
CSP se utiliza para evitar la creación de secuencias de comandos entre sitios, determinando qué recursos se pueden descargar. De la lista completa, este encabezado tomará más tiempo que el resto para crear y soportar adecuadamente, y aún más otros están en riesgo. Cuando desarrolle un CSP, verifíquelo cuidadosamente: si bloquea repentinamente la fuente que está utilizando, interrumpa la funcionalidad de su propio sitio.
Para la versión preliminar, puede usar una herramienta maravillosa: una extensión para el navegador Mozilla, Laboratorio CSP . Instálelo en un navegador, estudie cuidadosamente el sitio para el que desea crear un CSP y luego use el CSP generado en su sitio. Idealmente, aún necesita volver a trabajar JavaScript para poder eliminar la directiva insegura en línea.
El CSP puede parecer complicado y confuso, por lo que si desea profundizar en el tema, visite el sitio web oficial .
Puedes preconfigurar CSP de esta manera (en un sitio de combate, lo más probable es que requiera muchas modificaciones). Agregue dominios a cada sección de su sitio.
# Default to only allow content from the current site # Allow images from current site and imgur.com # Don't allow objects such as Flash and Java # Only allow scripts from the current site # Only allow styles from the current site # Only allow frames from the current site # Restrict URL's in the <base> tag to current site # Allow forms to submit only to the current site Content-Security-Policy: default-src 'self'; img-src 'self' https://i.imgur.com; object-src 'none'; script-src 'self'; style-src 'self'; frame-ancestors 'self'; base-uri 'self'; form-action 'self';
Seguridad de transporte estricta
Este encabezado le dice al navegador que solo puede ingresar al sitio usando el protocolo HTTPS; siempre habilítelo si HTTPS está activado en su sitio. Inclúyalo en todos los subdominios utilizados, si los hay.
Strict-Transport-Security: max-age=3600; includeSubDomains
Opciones de tipo de contenido X
Gracias a este encabezado, los navegadores se adhieren a los tipos MIME instalados por la aplicación, lo que ayuda a prevenir algunos ataques de secuencias de comandos entre sitios.
También reduce el riesgo de un comportamiento inesperado de la aplicación cuando el navegador "adivina" incorrectamente el tipo de contenido en el sitio, por ejemplo, si el desarrollador designa una página "HTML" y el navegador ve JavaScript e intenta representar la página en consecuencia. Además, gracias a este encabezado, el navegador siempre mantiene los tipos MIME instalados por el servidor.
X-Content-Type-Options: nosniff
Control de caché
Este será más pobre que los demás, porque para diferentes tipos de contenido probablemente necesite diferentes políticas de almacenamiento en caché.
No se debe almacenar en caché ninguna información confidencial, como la página de un usuario o la página de pago del producto. Una de las razones de esto es que otro usuario de la computadora no presiona el botón Atrás, no lee el historial y no ve los datos personales de otro usuario.
Sin embargo, puede y debe almacenar en caché aquellas páginas que rara vez se actualizan, como los recursos estáticos (imágenes, archivos CSS y JS). El almacenamiento en caché se puede configurar página por página o utilizando expresiones regulares en la configuración del servidor.
# Don't cache by default Header set Cache-Control no-cache # Cache static assets for 1 day <filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$"> Header set Cache-Control "max-age=86400, public" </filesMatch>
Expira
Este encabezado establece el tiempo que la solicitud actual se almacena en caché. Se ignora si el encabezado Cache-Control max-age está habilitado, por lo que solo lo habilitamos en caso de que un simple escáner lo verifique, excluyendo los controles de almacenamiento en caché.
Suponemos que, por razones de seguridad, el navegador no almacena nada en caché, por lo que la fecha en el encabezado siempre estará en el pasado.
Expires: 0
Opciones de marco X
Este encabezado permite la visualización del sitio en un iFrame.
Al colocar su sitio web en un iFrame, un recurso malicioso tiene la oportunidad de realizar un ataque de clickjacking, al lanzar algún tipo de JavaScript que engaña al usuario para que haga clic en el iFrame, y luego comienza a interactuar con el recurso desde su nombre de usuario (es decir, una persona hace clic en un enlace o botón malicioso) sin siquiera saberlo!
Este encabezado siempre debe configurarse para fallar, con la excepción si usa marcos intencionalmente. Entonces el encabezado debe establecerse en la misma fuente. Si utiliza marcos con un sitio diferente de forma predeterminada, incluya en la lista blanca el dominio de terceros.
También se debe tener en cuenta que este encabezado se reemplaza por la directiva CSP frame-ancestors. Recomiendo encenderlo por ahora, pero solo para cerrar las herramientas para verificar los encabezados, lo más probable es que lo eliminen en el futuro.
X-Frame-Options: deny
Acceso-Control-Permitir-Origen
Este encabezado le dice al navegador qué código externo de qué sitios de terceros tiene derecho a realizar solicitudes a una página específica. La configuración predeterminada suele ser correcta, pero puede cambiarla si es necesario.
Por ejemplo, el sitio A contiene algún tipo de JavaScript que desea realizar una solicitud al sitio B. El sitio B debe responder a esta solicitud, si el encabezado permite que el sitio A realice una solicitud. Si necesita configurar muchas fuentes, consulte los detalles en la página MDN .
Aquí puede confundirse un poco, así que hice un diagrama para ilustrar cómo funciona este encabezado:

Flujo de datos con acceso-control-permitir-origen
Access-Control-Allow-Origin: http://www.one.site.com
Establecer cookie
Asegúrese de que sus cookies estén configuradas solo a través del protocolo HTTPS (con encriptación) y que no sean accesibles a través de JavaScript. Estos archivos solo se pueden enviar si su sitio también es compatible con HTTPS, como debería ser. Siempre necesita establecer estas banderas:
Ejemplo de definición de cookie:
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly
Lea más en la excelente documentación de cookies de Mozilla .
Protección X-XSS
Este encabezado le dice al navegador que cancele los ataques de secuencias de comandos entre sitios detectados. Al encenderlo, no se arriesga mucho, pero pruébelo antes de lanzarlo al entorno de producción.
X-XSS-Protection: 1; mode=block
Ejemplo de configuración del servidor web
En general, en la configuración del servidor, es mejor agregar encabezados a todo el sitio. Las cookies son una excepción, ya que se definen en la propia aplicación.
Le aconsejo que, antes de agregar encabezados al sitio, primero verifique con el Observatorio o mire manualmente los encabezados; verifique cuáles ya están instalados. Algunos motores de sitios y servidores instalarán todo por su cuenta, así que solo implemente los encabezados que necesita o cambie los que lo necesitan.
Configuración de Apache
Ejemplo de configuración de Apache en .htaccess:
<IfModule mod_headers.c> ## CSP Header set Content-Security-Policy: default-src 'self'; img-src 'self' https://i.imgur.com; object-src 'none'; script-src 'self'; style-src 'self'; frame-ancestors 'self'; base-uri 'self'; form-action 'self'; ## General Security Headers Header set X-XSS-Protection: 1; mode=block Header set Access-Control-Allow-Origin: http://www.one.site.com Header set X-Frame-Options: deny Header set X-Content-Type-Options: nosniff Header set Strict-Transport-Security: max-age=3600; includeSubDomains ## Caching rules # Don't cache by default Header set Cache-Control no-cache Header set Expires: 0 # Cache static assets for 1 day <filesMatch ".(ico|css|js|gif|jpeg|jpg|png|svg|woff|ttf|eot)$"> Header set Cache-Control "max-age=86400, public" </filesMatch> </IfModule>
Configuración de Nginx
## CSP add_header Content-Security-Policy: default-src 'self'; img-src 'self' https://i.imgur.com; object-src 'none'; script-src 'self'; style-src 'self'; frame-ancestors 'self'; base-uri 'self'; form-action 'self'; ## General Security Headers add_header X-XSS-Protection: 1; mode=block; add_header Access-Control-Allow-Origin: http://www.one.site.com; add_header X-Frame-Options: deny; add_header X-Content-Type-Options: nosniff; add_header Strict-Transport-Security: max-age=3600; includeSubDomains; ## Caching rules # Don't cache by default add_header Cache-Control no-cache; add_header Expires: 0; # Cache static assets for 1 day location ~* \.(?:ico|css|js|gif|jpe?g|png|svg|woff|ttf|eot)$ { try_files $uri @rewriteapp; add_header Cache-Control "max-age=86400, public"; }
Configuración de encabezado de nivel de aplicación
Si no tiene acceso al servidor web o los requisitos para configurar los encabezados son complejos, entonces probablemente tendrá que configurarlos en la propia aplicación. Por lo general, para todo el sitio, esto se realiza mediante middleware o se basa en una configuración única de encabezados para cada solicitud.
Por brevedad, incluí solo un encabezado en cada ejemplo. Agrega de la misma manera todo lo que se necesita.
Nodo y expreso:
Agregar ruta de montaje global:
app.use(function(req, res, next) { res.header('X-XSS-Protection', 1; mode=block); next(); });
Java y primavera
Tengo poca experiencia con Spring, pero Baeldung tiene una excelente guía para configurar encabezados en Spring.
Php
No estoy familiarizado con varios entornos PHP. Busque middleware para consultas. Para una sola solicitud, todo es simple.
header("X-XSS-Protection: 1; mode=block");
Python / Django
Django incluye middleware de seguridad personalizable que hará todo esto por usted. Actívalos primero.
Las respuestas de algunas páginas pueden interpretarse como un diccionario. Django tiene una forma especial de trabajar con el almacenamiento en caché, y si desea configurar los encabezados de almacenamiento en caché de esta manera, debe familiarizarse con él.
response = HttpResponse() response["X-XSS-Protection"] = "1; mode=block"
Conclusiones
La configuración de encabezados es un proceso relativamente simple y rápido, pero aumenta el nivel de seguridad del sitio, en términos de protección de datos, de secuencias de comandos entre sitios y clics.
En el futuro, se protegerá del fracaso de las transacciones, porque su calificación de seguridad se mantendrá en el nivel. La práctica de evaluarlo en función de los parámetros que he examinado está ganando impulso, y me parece que su papel en los próximos años en el campo de las ventas solo aumentará.
¡Avíseme si me perdí algún titular importante!