Pruebas de seguridad

Política de seguridad de contenido (CSP)

Crea y prueba una Política de seguridad de contenido para WordPress que reduzca el riesgo XSS sin romper plugins e incrustaciones.

Content Security Policy (CSP) es una cabecera de respuesta HTTP que indica al navegador qué fuentes pueden cargar scripts, estilos, imágenes, frames y otros recursos. Usada con cuidado, limita lo que puede hacer el código inyectado. Usada sin cuidado, rompe Analytics, fuentes, incrustaciones y la administración de WordPress.

Security Ninja Pro puede establecer cabeceras relacionadas desde Security Ninja → Correcciones. Prefiere el modo solo de informe mientras ajustas una política. Consulta también Cabeceras de seguridad.

Por qué los sitios WordPress usan CSP

Una página WordPress típica carga recursos del tema, plugins, CDN, fuentes y analítica. Sin CSP, el navegador ejecutará JavaScript inyectado igual que scripts legítimos. CSP no corrige todos los fallos de plugins, pero sube el listón tras una inyección.

Cómo funciona CSP

Una política básica:

Content-Security-Policy: script-src 'self'

Eso permite scripts solo desde tu propio origen. Los scripts externos o inyectados se bloquean (o se informan, en modo solo de informe).

Directivas útiles

default-src
Reserva para tipos de recurso que no hayas listado
script-src
Fuentes de JavaScript permitidas
style-src
Fuentes de CSS permitidas
img-src
Fuentes de imágenes permitidas
font-src
Fuentes de tipografías permitidas
connect-src
AJAX, fetch, WebSocket, EventSource
frame-src
Frames incrustados (YouTube, mapas, widgets de pago)
object-src
Plugins como Flash; normalmente 'none'
form-action
Destinos permitidos de envío de formularios
frame-ancestors
Quién puede incrustar tus páginas (relacionado con clickjacking)
report-uri / APIs de informe
Dónde envían los navegadores informes de violación

Ejemplos de políticas

Línea base solo HTTPS (control XSS débil):

Content-Security-Policy: default-src https:

Lista de permitidos de CDN habituales (suele necesitar más ajuste):

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:;

Punto de partida estricto (romperá muchos sitios WordPress hasta que añadas fuentes):

Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self';

Palabras clave

'none'
Bloquea todo ese tipo
'self'
Mismo origen (no todos los subdominios)
'unsafe-inline'
Permite script/estilo en línea; debilita CSP
'unsafe-eval'
Permite APIs tipo eval(); debilita CSP

Prefiere nonces o hashes frente a 'unsafe-inline' cuando puedas. Muchos plugins de WordPress siguen necesitando excepciones temporales.

Prueba antes de aplicar

Usa primero el modo solo de informe:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri https://tusitio.com/csp-report

Puedes enviar una cabecera de aplicación y otra solo de informe a la vez mientras pruebas una política más estricta. No confíes ciegamente en los payloads de informes de violación; limita la tasa de cualquier endpoint que los acepte.

Problemas específicos de WordPress

  • Scripts y estilos en línea en temas y plugins suelen necesitar 'unsafe-inline', nonces o refactorización.
  • Servicios de terceros (Analytics, fuentes, chat, anuncios) necesitan entradas explícitas en la lista de permitidos.
  • wp-admin usa muchos scripts en línea. Considera una política más laxa para URLs de administración que para el sitio público.
  • Incrustaciones de YouTube / mapas necesitan frame-src (y a veces ajustes de Referrer-Policy). Consulta Error 153 de YouTube (documentación en inglés).

Fragmentos de ejemplo para listas de permitidos:

script-src https://www.google-analytics.com
font-src https://fonts.gstatic.com
style-src https://fonts.googleapis.com
frame-src https://www.youtube.com

Cómo añadir la cabecera

Apache (.htaccess):

Header set Content-Security-Policy "default-src 'self';"

Tema o plugin pequeño:

add_action(
	'send_headers',
	function () {
		header( "Content-Security-Policy: default-src 'self';" );
	}
);

Security Ninja Pro: activa y ajusta opciones relacionadas con CSP en Security Ninja → Correcciones.

Lista de comprobación práctica

  1. Empieza en modo solo de informe.
  2. Observa la consola del navegador y los informes de violación.
  3. Añade solo las fuentes que necesites.
  4. Evita comodines amplios como https://*.
  5. Incluye data: en img-src si tu tema usa URIs data.
  6. Vuelve a probar tras instalar o actualizar plugins.
  7. Mantén CSP como una capa. Las actualizaciones, autenticación fuerte y el firewall siguen importando.

Más lectura

¿Sigues atascado? Obtener ayuda o contáctanos .

Larger screenshot

Enlarged image