Generador de CSP — política de seguridad de contenido, con los puntos delicados señalados
Generador de CSP
Marque las directivas y los orígenes, y esta página ensambla una Content-Security-Policy correcta de una sola línea para la cabecera de respuesta o la etiqueta <meta>, además de las notas que importan: qué directivas nunca recurren a default-src, cuándo un hash o un nonce anula en silencio unsafe-inline y qué desactiva strict-dynamic. Un generador de hashes SHA-256/384/512 convierte los scripts y estilos en línea en orígenes 'sha256-…'. Todo se ejecuta en su navegador; no se sube nada.
Directivas de obtención: de dónde puede venir el contenido
Las directivas sin marcar simplemente no aparecen en la política; una marca sin orígenes seleccionados se ignora. 'none' anula las demás casillas de su fila. El cuadro de orígenes adicionales acepta una lista separada por comas: nombres de host (cdn.example.com), esquemas (https:), hashes y nonces con o sin sus comillas.
directiva
'self'
'none'
'unsafe-inline'
'unsafe-eval'
'strict-dynamic'
data:
blob:
orígenes adicionales
Directivas de documento: lo que la propia página puede hacer
Estas cuatro no recurren a default-src: si se omiten, significa «sin restricción», así que una política completa las establece explícitamente.
directiva
'self'
'none'
orígenes adicionales
Interruptores, nonce e informes
nonce de script
report-uri
report-to
Política
Todavía no hay nada construido. Marque algunos orígenes y pulse Construir política, o cargue el ejemplo de línea base de OWASP.
Generador de hashes para scripts y estilos en línea
Pegue exactamente el contenido entre <script> y </script> (o el bloque de estilo), byte a byte, sin salto de línea al principio ni al final, y elija un algoritmo. El resultado es el origen 'sha256-…' que espera CSP 3.
Aquí aparece la salida del hash.
Despliegue como cabecera, no como etiqueta meta, siempre que pueda. La cabecera de respuesta es la CSP completa: frame-ancestors, report-uri y report-to solo funcionan ahí, y una cabecera se aplica antes del primer byte de HTML que se analiza. La etiqueta meta es la alternativa para archivos estáticos sin configuración del servidor. Compruebe las cabeceras que envía realmente su sitio en el verificador de cabeceras de seguridad, y desglose los bloques de respuesta sin procesar en el analizador de cabeceras HTTP.
Autocomprobación Vuelve a ejecutar el constructor frente a estados fijos: orden de los orígenes, exclusión mutua de 'none', la cadena de la línea base de OWASP, el entrecomillado de nonce y hash, las notas sin recurso a respaldo para base-uri / form-action / frame-ancestors, unsafe-inline anulado por nonce o hash, notas de strict-dynamic, nombres de cabecera de Report-Only, exclusiones de la etiqueta meta, el generador de hash frente a vectores SHA calculados de forma independiente, y las rutas negativas. No se envía nada a ningún sitio.
¿Qué es una política de seguridad de contenido (CSP)?
En una frase: una CSP es una lista blanca que el servidor envía con la página para indicar al navegador exactamente de dónde pueden venir los scripts, estilos, imágenes y conexiones; así, aunque un atacante inyecte HTML, el script inyectado no se carga, porque su origen no está en la lista.
lo que la propia página puede hacer (ser incrustada, enviar formularios, resolver URL relativas)
no: cada una debe establecerse explícitamente
Informes y otras
report-uri, report-to, upgrade-insecure-requests
adónde van los informes de infracciones, y la actualización de URL heredadas
no (no son directivas de obtención)
Los bordes más afilados, un párrafo cada uno
'unsafe-inline' frente a hashes y nonces. Si una directiva contiene un nonce o cualquier origen hash, CSP 3 indica que 'unsafe-inline' se ignora: se mantiene solo para navegadores antiguos. Por eso «añadimos un nonce y mantuvimos unsafe-inline por seguridad» significa que los navegadores modernos aplican el nonce. El generador marca la combinación para que sea una decisión y no un accidente.
strict-dynamic desactiva su lista blanca. Con strict-dynamic en script-src, los orígenes de host, los esquemas, 'self', 'unsafe-inline' y data: se ignoran para los scripts; solo importan los nonces y los hashes, y los scripts que estos cargan pueden cargar más scripts. Es la forma moderna de ejecutar scripts cargadores, pero deja el resto de la lista de script-src como decorativo.
Las etiquetas meta son de segunda clase.frame-ancestors, report-uri y report-to se ignoran en <meta http-equiv>. El generador muestra qué partes de su política no se aplicarían en silencio.
Errores habituales
Empezar con default-src * más una larga lista de excepciones. Trabaje al revés: un default-src 'self' estricto, y después amplíe solo las directivas que lo necesiten. Las políticas estrictas fallan a gritos durante las pruebas; las amplias fallan en silencio para siempre.
Publicar script-src 'unsafe-inline' 'unsafe-eval' y darlo por terminado. Esa política bloquea casi nada de lo que quiere un ataque XSS. Ponga nonce o hash a sus scripts, añada strict-dynamic y mantenga report-only en producción para detectar regresiones.
Olvidar que default-src no cubre todo.base-uri, form-action, frame-ancestors y sandbox no tienen respaldo: la laguna más citada en despliegues reales de CSP.
Probar primero en modo de aplicación. Ejecute en Report-Only con un colector durante una semana, lea los informes y solo entonces active la aplicación. Una política que rompe el pago es peor que no tener ninguna.
Calcular los hashes con espacios en blanco distintos. Un hash cubre los bytes exactos del bloque en línea; un paso de compilación «útil» que recorta los saltos de línea finales cambia todos los hashes. Genere los hashes a partir de lo que se despliega, no a partir del código fuente.
Preguntas frecuentes
¿Necesito default-src si enumero todas las directivas? No, pero conservarla como suelo es buena higiene: las nuevas directivas de obtención de navegadores futuros se regirán entonces por su base en lugar de por «permitido».
¿Qué hace realmente upgrade-insecure-requests? Indica al navegador que reescriba cada URL http:// que la página cargaría (imágenes, estilos, peticiones) a https:// antes de pedirla. Es una herramienta de migración; el estado final son páginas sin ninguna URL http://.
¿Nonce o hash? Nonce cuando controla la respuesta del servidor (un valor aleatorio por respuesta, en la cabecera y en cada etiqueta de script). Hash cuando el HTML es estático o está en caché. Nunca un nonce estático: un nonce que no cambia es simplemente unsafe-inline con pasos extra.
¿Por qué llega mi política pero no llegan las infracciones? Compruebe si está en Report-Only (solo informes), si report-uri apunta a un colector que acepta POST, y si también configuró la maquinaria de Reporting-Endpoints / Report-To que exige la directiva moderna report-to.
¿Una CSP sustituye a otras protecciones? No. Es una capa: siga escapando su salida, mantenga las cookies con HttpOnly y Secure, mantenga HSTS. El verificador de cabeceras de seguridad de este sitio califica el conjunto completo.