Generador de Content Security Policy
Elige las fuentes que tu sitio necesita de verdad y obtén una cabecera Content-Security-Policy, una etiqueta meta y una configuración de servidor listas para pegar. Genera nonces y hashes de scripts, cambia a report-only para hacer pruebas sin riesgo y ve avisos sobre directivas débiles mientras la creas.
Última actualización:
Importar una política existente
Opciones
Ayudantes de nonce y hash
—
Tu servidor debe crear un nonce aleatorio nuevo en cada respuesta. Usa este para plantillas y pruebas.
Más directivas (child-src, manifest-src, sandbox, Trusted Types, directivas sin procesar)
script-src-attr 'none')Cómo usar Generador de Content Security Policy
- Empieza con un ajuste predefinido (Estricta, Básica, o añade Google Fonts / Analytics) o importa una política que ya uses.
- Edita cada directiva: haz clic en los botones para añadir palabras clave o escribe hosts como
https://cdn.example.com. - Añade nonces o hashes para los scripts en línea en lugar de permitir 'unsafe-inline'.
- Activa report-only mientras pruebas para que las infracciones se notifiquen sin bloquear nada.
- Copia el resultado para tu servidor (Nginx, Apache, _headers, Express) o como etiqueta meta, despliégalo y revisa la consola del navegador en busca de infracciones.
Directivas CSP de un vistazo
| Directiva | Controla | ¿Recurre a default-src? |
|---|---|---|
default-src | Alternativa para las directivas fetch de abajo | - |
script-src | Archivos JavaScript, scripts en línea, manejadores de eventos, eval() | Sí |
style-src | Hojas de estilo, bloques <style>, atributos style | Sí |
img-src, font-src, media-src | Imágenes, fuentes web, audio y vídeo | Sí |
connect-src | fetch, XMLHttpRequest, WebSocket, EventSource, sendBeacon | Sí |
frame-src, worker-src | Iframes insertados; Web Workers y Service Workers | Sí (a través de child-src) |
object-src | <object> y <embed> | Sí |
base-uri | URL permitidas en <base href> | No |
form-action | Destinos de envío de formularios | No |
frame-ancestors | Qué sitios pueden insertar esta página | No (solo cabecera) |
upgrade-insecure-requests | Reescribe las URL de subrecursos http:// a https:// | - |
Expresiones de fuente
'self': el propio origen de la página (mismo esquema, host y puerto).'none': nada en absoluto; debe ser el único valor.- Hosts:
https://cdn.example.com,*.example.com,https://api.example.com:8443. Es preferible usar URL https completas. - Esquemas:
https:,data:,blob:,wss:.data:está bien para imágenes, pero es peligroso en script-src. 'nonce-<base64>': permite los elementos con un atributononcecoincidente.'sha256-<base64>': permite el código en línea cuyo hash coincide exactamente.'strict-dynamic': la confianza se propaga de un script con nonce o hash a los scripts que carga; entonces se ignoran las listas de hosts.'unsafe-inline','unsafe-eval','unsafe-hashes': debilitan la protección; evítalos en script-src siempre que puedas.
Una forma segura de implantar una CSP
- Empieza con el ajuste predefinido Básica o Estricta y añade los servicios de terceros que realmente usas.
- Despliégala como
Content-Security-Policy-Report-Onlycon un endpoint de informes y navega por todos los tipos de página de tu sitio. - Corrige o permite cada infracción legítima (mueve los scripts en línea a archivos, añade nonces, añade hosts).
- Cambia a la cabecera
Content-Security-Policy, que aplica la política, y mantén activados los informes para detectar regresiones.
Preguntas frecuentes
¿Qué es una Content Security Policy?
Una Content Security Policy (CSP) es una cabecera de respuesta HTTP que indica al navegador de qué fuentes puede cargar una página scripts, estilos, imágenes, frames y otros contenidos. Todo lo que no esté en la lista se bloquea, lo que dificulta mucho los ataques de cross-site scripting (XSS) y de inyección de datos.
¿Uso la cabecera o la etiqueta meta?
Usa la cabecera HTTP siempre que puedas. La etiqueta meta funciona con la mayoría de las directivas, pero los navegadores ignoran frame-ancestors, report-uri, report-to y sandbox en una etiqueta meta, y el modo report-only no está disponible en absoluto. Además, la etiqueta meta solo protege el contenido que va después de ella, así que debe estar al principio del head.
¿Qué es un nonce de CSP?
Un nonce es un valor aleatorio de un solo uso que añades a la política como 'nonce-abc123' y a cada script en línea permitido como nonce="abc123". El servidor debe generar un nonce nuevo e impredecible en cada respuesta; un nonce fijo no ofrece ninguna protección. Los nonces generados aquí son valores aleatorios de 128 bits para pruebas o plantillas.
¿Qué hace 'strict-dynamic'?
Con 'strict-dynamic', un script permitido mediante un nonce o un hash puede cargar otros scripts, y los navegadores compatibles con CSP Level 3 ignoran las listas de hosts permitidos y 'self' en script-src. Es la base de la CSP estricta que recomienda Google: script-src 'nonce-...' 'strict-dynamic', con https: y 'unsafe-inline' solo como alternativas para navegadores antiguos.
¿Cómo pruebo una CSP sin romper mi sitio?
Envíala primero como Content-Security-Policy-Report-Only. Así los navegadores notifican las infracciones en la consola de desarrollador (y a tu endpoint de report-uri o report-to), pero cargan todo como siempre. Cuando los informes estén limpios, cambia a la cabecera Content-Security-Policy, que sí aplica la política.
¿Por qué 'unsafe-inline' es un problema?
'unsafe-inline' permite cualquier script en línea y cualquier manejador de eventos de la página, que es justo lo que inyectan la mayoría de los ataques XSS, así que elimina casi toda la protección de la CSP. Es preferible usar nonces o hashes. Ten en cuenta que, cuando hay un nonce o un hash en script-src, los navegadores con CSP Level 2+ ignoran 'unsafe-inline', así que puede quedarse como alternativa para navegadores muy antiguos.
¿La CSP sustituye a X-Frame-Options?
La directiva frame-ancestors es el sustituto moderno de X-Frame-Options y es más flexible (acepta una lista de orígenes permitidos). frame-ancestors 'none' equivale a DENY y 'self' equivale a SAMEORIGIN. Muchos sitios envían ambas cabeceras por los navegadores antiguos.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.