= WordPress, webinar seguridad * Nominalia: [[https://www.escueladeinternet.com/]] * [[https://www.escueladeinternet.com/seguridad-wordpress-hackeo]] == vulnerabilidades * 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) == Amanenazas * 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 == prácticas recomendadas * 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) == ejemplo práctico === analisis * 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 === actualizaciones * 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 === corrección vulnerabilidadeas * 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) === securización * 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" * plugin: https://wordpress.org/plugins/change-username/ * manual: * crear nuevo * eliminar aniguo, asignar el contenido a otro usuario * Desactivar XML-RPC-API * [[https://wordpress.org/plugins/disable-xml-rpc-api/]] (Neatma (Amin Nazemi) ) * .htaccess: * vinculado al tema:// 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 * plugin (para necesidades especiales): [[https://es.wordpress.org/plugins/user-role-editor/]] * Desactivar feeds y atom * plugin [[https://es.wordpress.org/plugins/disable-feeds-wp/]] * Desactivar enumeración de usuarios * WordFence * Desactivar logs de WP y PHP * php_flag display_errors Off php_flag display_startup_errors Off php_flag log_errors Off php_value error_reporting 0 * 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:# Proteger debug.log Order allow,deny Deny from all * 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: Order Allow,Deny Deny from all * Plugin: [[https://es.wordpress.org/plugins/wp-hide-security-enhancer/]] * Desactivar exploración de directorios * buscar en Google: site: intitle:"index of" * WordFence * Options -Indexes * Cabeceras de seguridad (contra XSS) * # ------------------------------------------------------------- # 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; " * Plugin: [[https://es.wordpress.org/plugins/http-headers/]] == Desinfección * contención * backup * desinfección === contención * modo mantenimineto * cambiar todas las contraseñas * wordpress admins * BDD * FTP * cerrar todas las sesiones activas * regenerar las claves de seguridad wp-config.php: [[https://api.wordpress.org/secret_key/1.1/salt/]] === backup * en el estado en que esté... * ficheros, BDD * Updraft Plus, WP Vivid === desinfección * 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: \\ {{.:pasted:20251020-081820.png?600}} * 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 == plugins recomendados * WordFence (seguridad) * GOTMLS (seguridad) * WP Maintenance (Modo mantenimiento) * Disable XML-RPC-API * Per Neatma (Amin Nazemi) * NS Cloner - Site Copier