Cómo permitir actualizaciones en el escritorio de WordPress sin desactivar la protección contra clickjacking

El clickjacking es una vulnerabilidad de seguridad frecuente en sitios web que puede mitigarse fácilmente mediante cabeceras HTTP como X-Frame-Options o Content-Security-Policy. En nuestro artículo anterior sobre cómo proteger WordPress contra clickjacking, explicamos cómo implementar estas medidas.

Sin embargo, si aplicas estas cabeceras de forma global, puede que el escritorio de WordPress no te permita actualizar plugins, temas o el propio core desde el navegador, debido a que esas operaciones utilizan iframes internamente.

Este artículo detalla cómo permitir solo esas rutas específicas sin comprometer el resto de la seguridad de tu sitio WordPress.


1. Solución condicional en wp-config.php

Edita el archivo wp-config.php y añade lo siguiente:

// Permitir iframe solo para rutas de actualización del admin
if (
    strpos($_SERVER['REQUEST_URI'], '/wp-admin/update.php') !== false || 
    strpos($_SERVER['REQUEST_URI'], '/wp-admin/admin-ajax.php') !== false
) {
    header('X-Frame-Options: SAMEORIGIN');
    header("Content-Security-Policy: frame-ancestors 'self'");
} else {
    header('X-Frame-Options: DENY');
    header("Content-Security-Policy: frame-ancestors 'none'");
}
Lenguaje del código: PHP (php)

👉 Esto permitirá que el escritorio admin se cargue correctamente durante actualizaciones, manteniendo a la vez una política estricta en el resto del sitio.


2. Usar un plugin de seguridad (alternativa sin código)

Plugins como HTTP Headers o Redirection te permiten configurar cabeceras HTTP de forma selectiva:

  • Ve a Ajustes → HTTP Headers.
  • Configura:
    • X-Frame-Options: SAMEORIGIN
    • Content-Security-Policy: frame-ancestors 'self' https://tudominio.com

Asegúrate de que estos ajustes se apliquen solo a rutas del admin (/wp-admin/), si el plugin lo permite.


3. Configurar .htaccess con excepciones (para servidores Apache)

Edita tu archivo .htaccess:

# Bloqueo por defecto
<IfModule mod_headers.c>
  Header always set X-Frame-Options "DENY"
  Header always set Content-Security-Policy "frame-ancestors 'none'"
</IfModule>

# Excepción para wp-admin/update.php
<FilesMatch "update.php|admin-ajax.php">
  Header set X-Frame-Options "SAMEORIGIN"
  Header set Content-Security-Policy "frame-ancestors 'self'"
</FilesMatch>
Lenguaje del código: PHP (php)

4. Verificación con herramientas CLI o online

Puedes comprobar si los encabezados están bien configurados con:

curl -I https://tudominio.com/wp-admin/update.php
Lenguaje del código: JavaScript (javascript)

Deberías ver algo como:

X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'
Lenguaje del código: HTTP (http)

También puedes utilizar herramientas como:


5. Precaución: conflictos con otros plugins

Plugins como WP Rocket, Wordfence, Sucuri, o incluso configuraciones del servidor CDN (como Cloudflare), pueden sobrescribir estas cabeceras. Asegúrate de:

  • Borrar caché del navegador y plugins.
  • Validar cabeceras activas después de cada cambio.
  • Revisar los .htaccess personalizados o reglas Nginx adicionales.

Conclusión

Si estás aplicando políticas de seguridad estrictas en WordPress para protegerte del clickjacking, es fundamental que no interfieran con funciones básicas del escritorio como las actualizaciones. Afortunadamente, puedes hacerlo con condicionales, ajustes en el servidor o plugins especializados, sin renunciar a la protección del sitio.

David Carrero Fernández-Baillo

Experimentando con un sitio web sobre WordPress, este popular gestor de contenidos, entre otros muchos proyectos.

Te puede interesar...

    Comments are closed

    WordPress Directo
    WPDirecto.com es una revista especializada en WordPress y WooCommerce que ofrece una amplia gama de recursos, incluyendo tutoriales, análisis de plugins y plantillas, consejos de optimización y estrategias de SEO, para ayudar a los usuarios a mejorar y personalizar sus sitios web, manteniéndolos informados sobre las últimas novedades y tendencias en el mundo de WordPress.

    © 1995-2025 Color Vivo Internet, SLU (Medios y Redes Online).. Otros contenidos se cita fuente. Infraestructura cloud servidores dedicados de Stackscale.