Aquesta és una revisió antiga del document


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
    • code php wp-config.php>define('WP_DEBUG', false);

define('WP_DEBUG_LOG', false); define('WP_DEBUG_DISPLAY', false); @ini_set('display_errors', 0);</code>

  • 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
  • Manual:
    • readme.html
    • licente.txt
    • licencia.txt
    • wp-config-sample.php
  • Bloqueo en .htaccess:
    <FilesMatch "^(readme\.html|license\.txt|licencia\.txt|wp-config-sample\.php)$"> Order Allow,Deny 
    Deny from all 
    </FilesMatch>
  • 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.1761117080.txt.gz
  • Darrera modificació: 22/10/2025 00:11
  • per mate