
Requisitos Wordfence
ÍNDICE
- Amenazas de seguridad
- Prácticas recomendadas
- Pasos
- Análisis del wordpress
- Actualizaciones
- Corrección de vulnerabilidades
- Desinfectar web hackeada
- Finalización
- Requisitos
- Opciones
- Limitar acceso al login manual
- Desactivar XML-RCP
- Deshabilitar la enumeración de usuarios
- Desactivar feed atom rss
- Desactivar logs de wordpress y php
- Ocultar versión wordpress
- Borrar archivos de identifiación
- Desactivar la exploración de directorios
- Añadir cabeceras de seguridad
1. Amenazas de seguridad
- Vulnerabilidades en themes o plugins
- Vulnerabilidades en el núcleo de WordPress
- Vulnerabilidades en PHP
- Robo de credenciales o suplantación
- Fugas de información
- SPAM SEO
- Malware y puertas traseras
- Ataques Ddos y fuerza bruta
- Inyección SQL
- Cross-site scripting (XSS)
- File uploads vulnerabilities
- Secuestro de sesiones
- Redirecciones maliciosas
2. Prácticas recomendadas
- Actualizar regularmente
- Evitar plugin, themes nulled o sin actualizaciones
- Eliminar lo que no se use
- Hosting con PHP 8.1 o superior
- Usar ssl https
- No usar usuario admin
- Limitar el número de accesos erróneos
- Habilitar doble factor de autenticación
- Asignar roles
- Proteger el sistema de archivos ( 644 archivos, 755 carpetas, 600 wp-config.php, 400 .htaccess )
- Desactivar feed, rss, atom, XML-RPC
- Ocultar la versión de wordpress
- Borrar archivos de identificación de wordpress ( readme licencia .. )
- Desactivar debug de wordpress y php
- Configurar copias de seguridad
- Monitorizar y vigilar la web
- Alojar en un hosting de calidad
- Desactivar la exploración de directorios
- Cambiar el prefijo de la base de datos
- Añadir cabeceras de seguridad
- Deshabilitar la enumeración de usuarios
3. Pasos
- Análisis del wordpress
- Actualizaciones ( desactivar caché y luego activarla )
- Corrección de vulnerabilidades
- Securización
4. Análisis del wordpress
- Herramientas -> Salud del sitio -> Información
- Wordfence gratuito
- Desactivar casilla: Pausar las actualizaciones en vivo cuando la ventana pierde el foco
5. Actualizaciones
- Desactivar caché
- Actualizar plugins de 1 en 1
- Actualizar tema
- Actualizar Core
6. Corrección de vulnerabilidades
- Instalar plugin: disable XML-RPC-API de Amin Nazemi
- Obligar a usar contraseñas fuertes como hace el plugin Wordfence
7. Desinfectar web hackeada
- WordPress a modo mantenimiento
- Cambiar todas las contraseñas
- Cerrar todas las sesiones editando las salt keys de wp-config.php
- Realizar copia de seguridad aunque esté infectada
- Desinfectar con plugins como Wordfence y GOTMLS by Eli
- Caso A: no se puede acceder a wp-admin
- Conectar por FTP y ver la versión de WP en www->wp-includes->version.php
- Descargar de WordPress esa versión
- Entrar por FTP y borrar todo menos wp-content y wp-config.php y .htaccess si está bien
- Pegar el nuevo WordPress sin sobrescribir esos 3 archivos
- Revisar el archivo wp-config.php
- Analizar con Wordfence
- Analizar con GOTMLS
- Revisar los snippets de código. Mirar también en temas -> personalizar -> js
- Revisar los widgets en Apariencia
- Caso A: no se puede acceder a wp-admin
8. Finalización
Pedir una revisión a Google Search Console
9. Requisitos Wordfence
- PHP memory_limit: Al menos 256MB
- Tiempo de ejecución PHP (max_execution_time) de al menos 120 segundos
- Extensiones PHP activadas: cURL, json , mbstring , openssl ,pdo_mysql ,xml
- Versión de PHP: mínimo 5.3, recomendada 8.0 o superior
10. Opciones
- Usa el Firewall en modo extendido. En cortafuegos -> Todas las opociones de cortafuegos pulsa sobre “Optimizar el cortafuegos de Wordfence”. Esto crea una regla en .htaccess de forma que mucho del filtrado se hace antes de cargar WordPress, ahorrando CPU y memoria. De esta manera las peticiones maliciosas se bloquean sin cargar el núcleo de WordPress → menos PHP ejecutado.
- Limita los análisis a uno al día o uno a la semana por ejemplo y en horas de baja actividad de tu web. En la versión gratuita no existe la opción pero lo puedes hacer del siguiente modo: Para desactivar los escaneos automáticos desde Wordfence y utilizar una tarea cron en tu servidor (si tu hosting lo permite).
- Ve a Opciones de Exploración y desactiva “Programar exploraciones de Wordfence”.
- A continuación en tu panel de control del hosting crea un tarea cron que lanza el análisis una vez al día a la hora que quieras, o una vez a la semana…
- 0 3 * * * wget -q -O – «https://tudominio.com/wp-admin/admin-ajax.php?action=wordfence_start_scan» >/dev/null 2>&1
- Este ejemplo el escaneo cada día a las 3:00 AM.
- Cambia la hora o frecuencia según quieras (por ejemplo, 0 3 * * 0 para hacerlo solo los domingos) a las 3 de la mañana
- Ahora bien si tu sitio web no ha sufrido problemas de malware, esta bien actualizado y sin plugins abandonados o vulnerables AIOS también es una buena opción y puedes instalar WordFence, tenerlo desactivado y cada X tiempo activarlo para realizar un análisis más profundo y así quedarte tranquilo en cuando a vulnerabilidades y existencia de malware.
- IMPORTANTE: Algunos hostings tienen ModSecurity configurado de tal manera que bloquea WordFence. En esta caso hagas lo que hagas siempre fallará la exploración. Si lo puedes gestionar desactívalo para ver si es el problema y si no contacta con tu proveedor para que modifique la regla que esta bloqueando WordFence.
11. Limitar acceso al login manual
# Añadir al .htaccess
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from TU.IP.AQUI.XXX
</Files>
12. Desactivar XML-RCP
Añadir al fichero functions.php de tu tema hijo:
// 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’);
13. Deshabilitar la enumeración de usuarios
// Bloquear enumeración de usuarios
function bloquear_enumeracion_usuarios() {
if (!is_admin() && isset($_REQUEST[‘author’]) && intval($_REQUEST[‘author’])) {
wp_die(‘Acceso no autorizado’, ‘Error’, array(‘response’ => 403));
}
}
add_action(‘template_redirect’, ‘bloquear_enumeracion_usuarios’);
// Ocultar usuarios en API REST
add_filter(‘rest_endpoints’, function($endpoints) {
if (isset($endpoints[‘/wp/v2/users’])) {
unset($endpoints[‘/wp/v2/users’]);
}
if (isset($endpoints[‘/wp/v2/users/(?P<id>[d]+)’])) {
unset($endpoints[‘/wp/v2/users/(?P<id>[d]+)’]);
}
return $endpoints;
});
14. Desactivar feed atom rss
function disable_all_feeds() {
wp_die( __(‘Los feeds RSS y Atom están desactivados. Visita nuestro sitio web directamente.’)
}
add_action(‘do_feed’, ‘disable_all_feeds’,1);
add_action(‘do_feed_rdf’, ‘disable_all_feeds’, 1);
add_action(‘do_feed_rss’, ‘disable_all_feeds’, 1);
add_action(‘do_feed_rss2’, ‘disable_all_feeds’, 1);
add_action(‘do_feed_atom’, ‘disable_all_feeds’, 1);
// Eliminar enlaces de feeds del head
remove_action(‘wp_head’, ‘feed_links’, 2);
remove_action(‘wp_head’, ‘feed_links_extra’, 3);
15. Desactivar logs de wordpress y php
en .htaccess
# Desactivar display de errores PHP
php_flag display_errors Off
php_flag display_startup_errors Off
php_flag log_errors Off
php_value error_reporting 0
en wp-config.php
// Desactivar debug
define(‘WP_DEBUG’, false);
define(‘WP_DEBUG_LOG’, false);
define(‘WP_DEBUG_DISPLAY’, false);
@ini_set(‘display_errors’, 0);
# Proteger debug.log
<Files debug.log>
Order allow,deny
Deny from all
</Files>
16. Ocultar versión wordpress
// Ocultar versión de WordPress
remove_action(‘wp_head’, ‘wp_generator’);
add_filter(‘the_generator’, ‘__return_empty_string’);
// Eliminar versión de CSS y JS
function quitar_version_scripts($src) {
if (strpos($src, ‘ver=’)) {
$src = remove_query_arg(‘ver’, $src);
} return $src;
}
add_filter(‘style_loader_src’, ‘quitar_version_scripts’, 9999); add_filter(‘script_loader_src’, ‘quitar_version_scripts’, 9999);
17. Borrar archivos de identificación
# Bloquear archivos de identificación
<FilesMatch «^(readme.html|license.txt|licencia.txt|wp-config-sample.php)$»> Order Allow,Deny
Deny from all
</FilesMatch>
18. Desactivar la exploración de directorios
# Deshabilitar listado de directorios
Options -Indexes
19. Añadir cabeceras de seguridad
<IfModule mod_headers.c>
# ————————————————————-
# SEGURIDAD BÁSICA DE NAVEGADOR
# ————————————————————-
Header always set X-Content-Type-Options «nosniff»
Header always set X-Frame-Options «SAMEORIGIN»
Header always set Referrer-Policy «strict-origin-when-cross-origin»
# IMPORTANTE: Solo descomentar si tu sitio tiene certificado SSL activo
# Header always set Strict-Transport-Security «max-age=31536000; includeSubDomains; preload»
# ————————————————————-
# PERMISSIONS POLICY
# ————————————————————-
Header always set Permissions-Policy «accelerometer=(), camera=(), geolocation=(), gyroscope=(), microphone=(), payment=(), usb=()»
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress