WordPress, webinar seguridad

  • en themes o plugins
  • en núcleo WP
  • PHP → versión > 8.1
  • robo credenciales/suplantación
  • fugas de información (logs de error que exponen información sensible)
  • Malware y puertas traseras
  • DDOS y fuerza bruta
  • inyección SQL
  • XSS
  • subidas de ficheros no controladas
  • secuestro de sesiones (no https o mal configurado)
  • redirecciones maliciosas
  • ataques por IA
  • Actualizar core, plugins, temas…
    • eliminar aquellos que no se usan (el código PHP está ahí)
    • no instalar plugins abandonados (más de 9 meses sin actualizarse)
  • Instalar de sitios oficiales o confiables
  • PHP 8.1
  • acceso seguro
    • limitar númoro de accesos erróneos
    • 2FA
    • cambiar usuario «admin»
    • contraseñas largas y únicas
    • roles apropiados
  • sistema de archivos
    • 664 archivos
    • 600 wp-config.php
    • 400 .htaccess
    • 755 carpetas
    • desactivar feed rss y atom
    • desactivar XML-RPC
    • ocultar versión WP
    • borrar archivos de identificación de WP (readme, license)
    • deshabilitar la exploración de directorios
  • Debug y log de errores
    • desactivar por defecto
      • wp-config.php
      • .htacess
  • Copias de seguridad
    • diarios
    • guardar fuera del servidor (sobre todo cambios importantes)
    • algun plugin para copia interna de restauración rápida
  • Monitorizar
    • algún plugin de activity log
    • alertas por mail para acciones críticas
    • análisis malware y cambio de archivos
    • escanear semanlmente
  • Otros:
    • cambiar prefijo BDD
    • cabeceras de seguridad
    • deshabiliotar enumaración de usuarios
    • themeforest + envato (para tener temas actualizados de ese sitio de temas. Hay que vincular con la cuenta que compró el tema)
  • Herramientas → Salud del sitio → Información
    • Wordpress
      • versión
    • Tema activo
      • versión
    • Servidor
      • versión PHP
      • versión servidor web
  • plugin WordFence
    • desactivar en Opciones generales de WordFence → pausar actualizaciones en vivo cuando la ventana pierde el foco
    • opciones de exploración y planificación → alta sensibilidad
    • iniciar nueva exploración → listado de vulnerabilidades
  • borrar caché antes de actualizar para detectar errores producidos por una actualización (WP Fastest Caache)
  • activar plugin de mantenimiento (WP Maintenance)
  • Escritorio → actualizaciones
    • plugins (no actualizar todas de golpe, dificulta localizar un error)
    • temas
    • nucleo WP
  • Eliminar o sustituir abandonados o no en uso
  • Planificar sustitución
  • plugin sin soporte:
    • alternativas equivalentes
    • buscar solución a través de IA (claude.ia, por ejemplo)
  • Limitar el número de accesos erróneos
    • .htaccess (requiere IP Fija en el cliente)
    • WordFence
      • protección contra ataques de fuerza bruta
  • 2FA activo
    • WordFence tiene
  • Cambiar «admin»
  • Desactivar XML-RPC-API
    • .htaccess:
      <Files xmlrpc.php
      Oder Deny,Allow
      Deny from all
      </Files>
    • vinculado al tema:
      functions.php
      // Desactivar XML-RPC completamente
      add_filter('xmlrpc_enabled', '__return_false’);
      // Eliminar headers de XML-RPC
      remove_action('wp_head', 'rsd_link’);
      remove_action('wp_head', 'wlwmanifest_link');
  • contraseñas largas y únicas
    • WordFence
  • Asignar roles apropiados
  • Desactivar feeds y atom
  • Desactivar enumeración de usuarios
    • WordFence
  • Desactivar logs de WP y PHP
    • .htaccess
      php_flag display_errors Off
      php_flag display_startup_errors Off
      php_flag log_errors Off
      php_value error_reporting 0
    • wp-config.php
      define('WP_DEBUG', false);
      define('WP_DEBUG_LOG', false);
      define('WP_DEBUG_DISPLAY', false);
      @ini_set('display_errors', 0);
    • en caso de necesitar el fichero debug.log:
      .htaccess
      # Proteger debug.log 
      <Files debug.log> 
      Order allow,deny 
      Deny from all 
      </Files>
  • Ocultar versión de WP
    • WordFence
  • Borrar ficheros de identificación
  • Desactivar exploración de directorios
    • buscar en Google: site:<URL> intitle:«index of»
    • WordFence
    • .htaccess
      Options -Indexes
  • Cabeceras de seguridad (contra XSS)
    • .htaccess
      <IfModule mod_headers.c>
      # -------------------------------------------------------------
      #  SEGURIDAD BÁSICA DE NAVEGADOR
      # -------------------------------------------------------------
      # Evita que el navegador intente adivinar tipos MIME
      Header always set X-Content-Type-Options "nosniff"
      # Previene ataques de clickjacking
      Header always set X-Frame-Options "SAMEORIGIN"
      # Referrer-Policy (limita la información enviada en el encabezado Referer)
      Header always set Referrer-Policy "strict-origin-when-cross-origin"
      # Obliga a usar HTTPS (solo si tu sitio usa SSL)
      Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
      # -------------------------------------------------------------
      #  PERMISSIONS POLICY (ANTES Feature-Policy)
      # Controla las APIs y características disponibles en el navegador
      # -------------------------------------------------------------
      Header always set Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), microphone=(), payment=(), usb=(), fullscreen=(self)"
      # -------------------------------------------------------------
      #  CONTENT SECURITY POLICY (CSP)
      # Define qué recursos puede cargar el navegador.
      # Ajusta las URLs de scripts, estilos, imágenes, etc.
      # -------------------------------------------------------------
      Header always set Content-Security-Policy "
      default-src 'self';
      script-src 'self' 'unsafe-inline' 'unsafe-eval' https:;
      style-src 'self' 'unsafe-inline' https:;
      img-src 'self' data: https:;
      font-src 'self' https: data:;
      connect-src 'self' https:;
      frame-ancestors 'self';
      base-uri 'self';
      form-action 'self';
      object-src 'none';
      upgrade-insecure-requests;
      "
      </IfModule>
  • contención
  • backup
  • desinfección
  • en el estado en que esté…
  • ficheros, BDD
    • Updraft Plus, WP Vivid
  • restaurar ficheros originales del Core
  • 2 plugins para limpiar:
    • WordFence
    • GOTMLS
  • caso web no funcional
    • comprovar versión WP exacta: /wp-includes/version.php → $wp_version = «X.X.X»
    • descargar la misma versión desde https://ca.wordpress.org/download/releases/
    • borrar todo excepto:
      • carpeta wp-content
      • ficheros wp-config.php y .htaccess
    • subir la versión limpia
    • revisar los ficheros que no hemos eliminado:
      • ejemplos .htaccess:
  • caso web funcional
    • Usar plugins para desinfectar wp-content
      • WordFence
        • Opciones Avanzadas de exploración → asegurarnos que no hay exclusiones (si ya estaba instalado)
      • GOTMLS (mejor escaneando BDD)
    • revisar snipets
      • plugin «Framentos de código» o equivalentes
        • nombres de archivo en minúscilas
        • desactivar barra navegador
        • activar emoticonos
        • Año actual
    • Temas
      • personalizar JS
    • Widgets: Apariencia → Widgets
  • WordFence (seguridad)
  • GOTMLS (seguridad)
  • WP Maintenance (Modo mantenimiento)
  • Disable XML-RPC-API
    • Per Neatma (Amin Nazemi)
  • NS Cloner - Site Copier
  • web/security/wordpress/seguridad.txt
  • Darrera modificació: 22/10/2025 00:15
  • per mate