Revise una Content-Security-Policy directiva por directiva y vea cómo los scripts la burlan
Se ejecuta en su navegador. Nada de lo que escribe se envía a ningún sitio. Comprobado el 16 de octubre de 2026.Una Content-Security-Policy indica al navegador desde dónde pueden cargarse los scripts y otro contenido. Solo protege contra scripts inyectados si script-src evita 'unsafe-inline', los comodines y los hosts que permiten eludirla, object-src es 'none' y base-uri está restringido. Un estudio de Google de 2016 halló que el 94.7% de las políticas reales podían eludirse; los nonces con 'strict-dynamic' lo resuelven.
Esta página se ha traducido automáticamente del original en inglés. Ninguna persona ha revisado todavía la traducción, así que la versión en inglés es la que debe consultar. Leer el original en inglés
Pegue la política, la línea completa del encabezado Content-Security-Policy o la etiqueta <meta> que la contiene.
Lea los hallazgos, los más graves primero: cada uno indica la directiva y lo que un atacante podría hacer con ella.
Revise la tabla de directivas en busca de nombres mal escritos y fuentes que el navegador ignorará.
Corrija la política, o parta de la plantilla estricta, y péguela de nuevo hasta que solo queden notas.
Es fácil cometer errores sutiles en una Content-Security-Policy, y los navegadores nunca se quejan: una directiva que no pueden leer se ignora. Esta herramienta lee la política exactamente como la especificación CSP Level 3 dice que lo hace un navegador y luego la evalúa según las conclusiones del estudio de Google de 2016 sobre políticas reales.
Hallazgos, los más graves primero.
| Gravedad | Ejemplos |
|---|---|
| Alta | 'unsafe-inline' sin nonce, * o https: en script-src, object-src distinto de 'none', 'strict-dynamic' sin nonce, un punto y coma que falta, self sin comillas |
| Media | 'unsafe-eval', hosts permitidos que se sabe sirven JSONP o AngularJS antiguo, base-uri abierto, fuentes http sin cifrar, directivas desconocidas |
| Baja | sin frame-ancestors, nonces cortos, directivas obsoletas, duplicados, 'unsafe-inline' para estilos |
| Nota | sin informes, report-uri sin report-to, fuentes que los navegadores ignoran con una política estricta |
Se aplica el respaldo. Cuando falta script-src, se evalúa default-src en su lugar; cuando faltan ambos, los scripts pueden cargarse desde cualquier lugar y la herramienta lo indica.
Pegue lo que tenga. La política sola, la línea completa del encabezado o una etiqueta <meta http-equiv>. Las políticas entregadas en una etiqueta meta no pueden usar frame-ancestors, report-uri ni sandbox, y la herramienta las señala. Un encabezado con varias políticas separadas por comas se divide, ya que cada una se aplica.
Cada fuente se comprueba. Palabras clave, nonces, hashes (con la longitud correcta para SHA-256, 384 o 512), esquemas y hosts se comprueban contra la gramática, y una directiva mal escrita recibe una sugerencia, como frame-ancestor por frame-ancestors.
Plantilla estricta. Un toque carga una política basada en nonce: script-src con un nonce y 'strict-dynamic', object-src 'none' y base-uri 'none'. Su servidor debe escribir un nonce aleatorio nuevo en el encabezado y en cada etiqueta script en cada respuesta.
La política se lee en su navegador y nunca se envía a ningún lugar. Para obtener los encabezados que envía un sitio en vivo, use HTTP Headers Checker.
No. Con 'unsafe-inline', cualquier script que un atacante logre inyectar en la página se ejecuta, que es exactamente lo que una Content-Security-Policy existe para impedir. Use en su lugar un nonce o un hash para cada script en línea. Cuando hay un nonce o un hash, los navegadores modernos ignoran 'unsafe-inline', así que mantenerlo como respaldo para navegadores antiguos es inofensivo.
La palabra clave 'strict-dynamic' permite que un script en el que se confió mediante un nonce o un hash cargue otros scripts, mientras que las listas de hosts permitidos y https: son ignoradas por los navegadores que la admiten. Combinada con un nonce, ofrece una política que es a la vez estricta y fácil de implantar. Sin ningún nonce ni hash, bloquea todos los scripts.
Los plugins cargados con etiquetas object o embed pueden ejecutar scripts fuera de las reglas de script-src, y los archivos Flash antiguos en hosts permitidos eran una forma habitual de eludirla. Pocos sitios necesitan ya plugins, así que object-src 'none' elimina toda esa vía. Si falta object-src, se aplica default-src, que a menudo no es 'none'.
Los hosts de scripts populares, como las grandes CDN y algunos dominios de Google, sirven endpoints JSONP o versiones antiguas de AngularJS. Un atacante que pueda inyectar marcado puede cargar esos archivos permitidos para ejecutar su propio código. El estudio de Google de 2016 halló que el 94.7% de las políticas reales basadas en listas de hosts podían eludirse así; los nonces con 'strict-dynamic' evitan el problema.
El navegador ignora la directiva y registra una advertencia en la consola, pero el resto de la política sigue aplicándose, de modo que la página pierde esa protección sin aviso. Un error como frame-ancestor en lugar de frame-ancestors deja la página expuesta al clickjacking. Esta herramienta enumera las directivas desconocidas y sugiere el nombre que probablemente quería escribir.
Sí, con una etiqueta meta http-equiv en el head de la página, pero tres directivas no funcionan ahí: frame-ancestors, report-uri y sandbox. Las políticas en una etiqueta meta además solo se aplican al contenido posterior a la etiqueta. Enviar la política como encabezado de respuesta HTTP es la opción fiable; la etiqueta meta sirve para alojamiento estático sin control de encabezados.
Los tipos y las normas cambian; consulte la fuente antes de fiarse de una cifra.
¿Sigue sin resolverlo? Pregunte sobre Evaluador de CSP y cualquiera que lo sepa puede responder. No se necesita cuenta.