Manual de Política de Seguridad de Contenido (CSP): Protegiendo Apps Frontend contra Inyección
aprender a manejar csp no es solo añadir una cabecera es un juego de ajedrez donde cada directiva cuenta y un error puede abrir la puerta a scripts maliciosos
Preguntas y Respuestas
Pregunta: ¿Qué directiva controla la carga de scripts externos?
Respuesta: La directiva script-src define qué orígenes pueden ejecutar código JavaScript en la página.
Pregunta: ¿Cómo se permite solo estilos en línea seguros?
Respuesta: Se usa style-src con el valor 'self' y se evita unsafe-inline para bloquear estilos incrustados no verificados.
Pregunta: ¿Qué sucede si se omite la directiva default-src?
Respuesta: El navegador aplicará una política por defecto permisiva lo que reduce la protección frente a inyecciones.
Pregunta: ¿Es posible combinar nonces y hashes para scripts?
Respuesta: Sí se pueden usar nonces generados por el servidor junto con hashes sha256 para permitir scripts específicos sin abrir brechas.
Contenido Principal
un amigo me advirtió que la primera vez que desplegué una política csp estricta la consola se llenó de errores y tuve que reescribir medio frontend en una noche de café
la directiva script-src es el corazón de la defensa porque controla qué código puede ejecutarse y cualquier fuga permite cross site scripting
usar nonces generados en cada respuesta del servidor añade una capa dinámica que evita la reutilización de scripts inyectados
los hashes sha256 son útiles para scripts estáticos que no cambian entre despliegues y permiten una política más predecible
Bloques de Insight
La directiva default-src actúa como red de seguridad para cualquier recurso sin regla explícita y su ausencia deja huecos que los atacantes explotan.
Los nonces deben ser criptográficamente aleatorios y de un solo uso para evitar que un script malicioso los reutilice en otra petición.
El uso de unsafe-inline anula gran parte de la protección de CSP porque permite ejecutar cualquier código incrustado en la página.
Las políticas de reporte (report-uri) ayudan a detectar violaciones en tiempo real sin bloquear la funcionalidad legítima.
Combinar script-src con strict-dynamic permite cargar scripts de confianza que a su vez cargan otros scripts sin romper la cadena de confianza.
Preguntas de Búsqueda Profunda
Pregunta: ¿Cómo afecta CSP a la carga de módulos ES6 dinámicos?
Respuesta: Los módulos dinámicos siguen las mismas reglas de script-src y requieren nonces o hashes para cada importación en tiempo de ejecución.
Pregunta: ¿Qué implicaciones tiene CSP en aplicaciones de una sola página que usan service workers?
Respuesta: Los service workers heredan la política del documento principal y pueden interceptar peticiones para aplicar reglas adicionales.
Pregunta: ¿Es posible delegar la generación de nonces a un CDN sin comprometer la seguridad?
Respuesta: Sí si el CDN firma los nonces con una clave secreta compartida y rota las claves periódicamente.
Micro Realidad
escuché el zumbido del ventilador mientras revisaba los logs de violación de csp a las tres de la mañana
el café se enfrió sobre el teclado cuando vi que una directiva mal escrita permitía scripts de un dominio desconocido
mi gato saltó sobre el monitor justo cuando el navegador mostraba el primer reporte de bloqueo
olvidé cerrar la pestaña de pruebas y el navegador siguió enviando reportes durante horas
el sonido de la notificación de slack me recordó que el equipo de seguridad esperaba mi informe
la luz del amanecer entró por la ventana mientras finalmente la política pasó sin errores
Perfil de Arrepentimiento
arrepentimiento por lanzar una política permisiva al principio y tener que reescribir medio código base bajo presión
arrepentimiento por no documentar los nonces generados y perder la trazabilidad al rotar claves
arrepentimiento por ignorar los reportes de violación y descubrir una brecha semanas después
Ganchos de Comparación
CSP frente a SameSite cookies: ambas mitigan inyección pero CSP controla recursos mientras SameSite limita envío de cookies en peticiones cruzadas.
CSP versus Subresource Integrity: SRI verifica integridad de archivos individuales mientras CSP define políticas globales de carga.
CSP comparado con Content Security Policy Level 3: la nueva versión añade directivas como trusted-types que refuerzan la defensa contra DOM XSS.
Bloques de Insight Segundo
La directiva trusted-types obliga a sanitizar datos antes de insertarlos en el DOM reduciendo drásticamente vectores de XSS basados en DOM.
El encabezado Content-Security-Policy-Report-Only permite probar políticas sin bloquear recursos lo que facilita la migración gradual.
Los navegadores modernos ignoran directivas desconocidas lo que permite extender la política sin romper compatibilidad.
Una política demasiado restrictiva puede romper funcionalidades legítimas como análisis de terceros o widgets de chat.
La rotación automática de nonces mediante middleware simplifica la operación y evita errores humanos en la generación manual.
Una Verdad
Muchos creen que CSP solo bloquea scripts externos pero en realidad también controla estilos imágenes fuentes y conexiones de red.