Poner una primera CSP en una web corporativa
Parte de la plantilla estricta, añade solo tus CDN y tu API en script-src y connect-src y publícala primero en Report-Only para ver qué se bloquearía.
Compón una Content Security Policy a partir de plantillas (estricta, analítica, permisiva), ajusta cada directiva, activa Report-Only o upgrade-insecure-requests y copia la cabecera HTTP o la etiqueta meta, con avisos sobre unsafe-inline, unsafe-eval y comodines.
Genera una cabecera de supervisión que no bloquea recursos.
Separa las fuentes con espacios o comas.
El generador de CSP te ayuda a escribir la cabecera Content-Security-Policy, que indica al navegador qué orígenes de scripts, estilos, imágenes o conexiones admite tu sitio. Está pensado para desarrolladores, maquetadores y administradores que quieren reducir el impacto de un fallo XSS sin memorizar la sintaxis de las directivas.
Una CSP (W3C Content Security Policy Level 3) es una lista de directivas separadas por punto y coma, cada una seguida de sus orígenes: `default-src 'self'; script-src 'self' https://www.googletagmanager.com; object-src 'none'; base-uri 'self'`. Las palabras clave como `'self'`, `'none'` o `'unsafe-inline'` van entre comillas simples; los hosts y esquemas (`https:`, `data:`), no. Las directivas de carga (script-src, img-src, connect-src…) heredan de default-src si faltan, pero base-uri, form-action y frame-ancestors no heredan: por eso la herramienta avisa cuando no están.
La herramienta junta los valores introducidos, elimina duplicados y campos vacíos y genera tres salidas: la política en bruto, la cabecera `Content-Security-Policy` (o `Content-Security-Policy-Report-Only` en modo de supervisión) y una etiqueta `<meta http-equiv>`. Después analiza la política y avisa si faltan default-src, object-src o base-uri, o si `'unsafe-inline'`, `'unsafe-eval'` o el comodín `*` debilitan la protección. La directiva upgrade-insecure-requests, sin valor, pide al navegador cargar por HTTPS los recursos referenciados en HTTP.
Selecciona Estricta, Con analítica, Permisiva o Personalizada y activa el modo Report-Only si quieres una cabecera de supervisión que no bloquee.
Rellena default-src, script-src, style-src, img-src, connect-src, frame-ancestors y el resto de campos, separando los orígenes con espacios o comas, y activa upgrade-insecure-requests si hace falta.
Pulsa «Generar CSP», revisa los avisos y copia o exporta la cabecera HTTP, la etiqueta meta o la política en bruto.
Parte de la plantilla estricta, añade solo tus CDN y tu API en script-src y connect-src y publícala primero en Report-Only para ver qué se bloquearía.
La plantilla «Con analítica» añade googletagmanager.com y google-analytics.com a las directivas adecuadas; complétala con las etiquetas que cargas realmente.
Un escáner indica «Falta Content-Security-Policy» o «unsafe-inline permitido»: reconstruye la política y comprueba que no queda ningún aviso antes de volver a producción.
Entrada
Directivas: default-src = 'self'; object-src = 'none'; base-uri = 'self'; Modo Report-Only: desactivadoResultado
Cabecera HTTP: Content-Security-Policy: default-src 'self'; object-src 'none'; base-uri 'self' — sin advertenciasNo corrige la vulnerabilidad, pero limita mucho lo que puede hacer un script inyectado al bloquear los scripts inline y los dominios no autorizados. Una CSP con 'unsafe-inline' en script-src pierde casi toda esa protección. OWASP la presenta como defensa en profundidad, además del escape correcto de los datos.
Es preferible la cabecera HTTP: se aplica desde el inicio de la carga y admite todas las directivas. La etiqueta meta sirve en un alojamiento estático sin acceso a las cabeceras, pero ignora frame-ancestors, report-uri y sandbox, y solo protege el contenido situado después de ella.
Añade a script-src un nonce (`'nonce-valorAleatorio'`, regenerado en cada respuesta y repetido en el atributo nonce de la etiqueta) o el hash del script (`'sha256-…'`, Base64 del SHA-256 de su contenido exacto). Puedes escribir estos valores directamente en el campo script-src; el hash se calcula con un generador SRI o de hash.
No. 'self' solo coincide con el mismo origen: mismo esquema, host y puerto. Para permitir cdn.example.com o todos los subdominios, añade explícitamente `https://cdn.example.com` o `https://*.example.com`.
La cabecera Content-Security-Policy-Report-Only evalúa la misma política sin bloquear nada: el navegador solo informa de las infracciones en la consola y, si añades una directiva report-to o report-uri, las envía a tu punto de recogida. Así puedes ajustar la política antes de pasar a la cabecera que bloquea.
Sí, frame-ancestors es el sustituto moderno de X-Frame-Options y tiene prioridad en los navegadores que lo admiten: `frame-ancestors 'none'` equivale a DENY. Muchos sitios mantienen ambos para clientes antiguos. Solo funciona en la cabecera HTTP, no en una etiqueta meta.
Herramientas relacionadas
Herramientas similares o complementarias a esta.
Genera HSTS, nosniff, Referrer-Policy, Permissions-Policy, COOP/COEP/CORP y X-Frame-Options para Nginx o Apache.
Genera el atributo integrity SRI de un script o una hoja de estilos a partir de un contenido, un archivo o una URL de CDN.
Analiza encabezados HTTP para revisar la seguridad, la caché, CORS y el comportamiento de las cookies.
Aprende a implantar una CSP de forma progresiva, sus directivas principales, Report-Only, nonces y errores frecuentes.
Comprende las capas que protegen un sitio web: HTTPS, cabeceras HTTP, CSP, SRI, autenticación, contraseñas e integridad.
Comprende HSTS, CSP, X-Content-Type-Options, Referrer-Policy y Permissions-Policy y cómo verificar las cabeceras realmente enviadas.