¿Qué es Content-Security-Policy y cómo ayuda?
Respuesta breve
Content-Security-Policy es una cabecera de respuesta HTTP que indica al navegador qué fuentes de scripts, estilos, imágenes y otros contenidos pueden cargarse y ejecutarse en una página. Al prohibir el script en línea y los orígenes no confiables — idealmente mediante nonces o hashes — actúa como una defensa en profundidad de respaldo que neutraliza las cargas útiles de XSS inyectadas, incluso cuando alguna se cuela.
Content-Security-Policy (CSP) es una política aplicada por el navegador, entregada como cabecera de respuesta HTTP, que restringe lo que una página puede cargar y ejecutar. Su principal función en la práctica es reducir el impacto del XSS: incluso si un atacante inyecta una etiqueta <script>, una buena CSP hace que el navegador simplemente rechace ejecutarla.
Cómo funciona
El servidor envía una política compuesta de directivas, cada una nombrando las fuentes permitidas:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-r4nd0m'; object-src 'none'; base-uri 'none'
default-src 'self'— por defecto, solo cargar recursos desde el propio origen de la página.script-src— controla de dónde puede provenir el script. Crucialmente, esto puede prohibir el script en línea yeval, que es donde se ejecuta la mayoría del XSS.object-src 'none',base-uri 'none'— cierran Flash/<object>y el secuestro de la etiqueta<base>.
Los nonces y hashes superan a las listas de dominios permitidos
Una lista de permitidos de dominios de scripts confiables es frágil — muchas CDN alojan bibliotecas vulnerables o puntos JSONP que permiten a los atacantes eludirla. Una CSP estricta usa en cambio un nonce por respuesta (un valor aleatorio que el servidor coloca en sus propias etiquetas legítimas <script nonce=...>) o un hash de los scripts en línea permitidos. Un script inyectado no tiene un nonce válido, por lo que el navegador lo bloquea. Este es el enfoque moderno recomendado.
Despliégala de forma segura
Content-Security-Policy-Report-Only no aplica nada pero informa de las violaciones a un punto de recolección, lo que te permite encontrar qué se rompería antes de activar la política. El informe también revela intentos de ataque reales.
Por qué es un respaldo, no la solución
La CSP no puede corregir la inyección subyacente — limita el radio de impacto. Sigues necesitando codificación de salida contextual como control principal. La CSP es el cinturón de seguridad, no una razón para conducir de forma imprudente.
Los entrevistadores buscan «limita dónde se cargan/ejecutan los scripts», nonce/hash frente a listas de dominios, la estrategia de despliegue Report-Only y enmarcar la CSP como defensa en profundidad en lugar de control principal.
Posibles preguntas de seguimiento
- ¿Por qué una CSP basada en nonce es más fuerte que una lista de permitidos de dominios?
- ¿Qué te permite hacer Content-Security-Policy-Report-Only?
- ¿Por qué la CSP es un respaldo en lugar de un control principal de XSS?