Estás en la versión internacional Acceder al sitio de Argentina

Cómo limpiar un WordPress hackeado o infectado

Pasos prácticos y dos videotutoriales en YouTube. Ojo: si la infección es seria, contratá soporte profesional.

Videotutoriales (YouTube)

Parte 1 / 2

Parte 2 / 2

1. Primero: cambiar todas las claves

  • Contraseña de cPanel.
  • Cuentas de FTP (eliminá las que no uses).
  • Usuario de MySQL: cambiar password en cPanel y reflejarlo en wp-config.php.
  • Renová las claves SALT de wp-config.php.

2. Buscar plugins infectados

Carpetas sospechosas típicas a revisar:

wp-content/plugins/ubh
wp-content/plugins/lou

Si las ves, borralas. Y revisá el listado de plugins que no recordás haber instalado.

3. Auto-actualización del core

En wp-config.php agregá:

define( 'WP_AUTO_UPDATE_CORE', true );

4. .htaccess blindado

Options -Indexes

# Bloquear xmlrpc.php
<Files xmlrpc.php>
  Order deny,allow
  Deny from all
</Files>

# Proteger archivos .ht*
<Files ~ "^.*\.([Hh][Tt][Aa])">
  Order allow,deny
  Deny from all
  Satisfy all
</Files>

# Proteger wp-config.php
<Files wp-config.php>
  Order deny,allow
  Deny from all
</Files>

# Proteger contra inyección SQL
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

# Antispam: bloquear posts a wp-comments-post sin referer válido
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*tudominio.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]

5. robots.txt recomendado

User-agent: *
Disallow: /cgi-bin
Disallow: /wp-admin
Disallow: /wp-includes
Disallow: /wp-content/plugins/
Disallow: /wp-content/cache/
Disallow: /wp-content/themes/
Disallow: */trackback/
Disallow: */feed/
Disallow: /*/feed/rss/$
Disallow: /category/*

User-Agent: Googlebot
Allow: /*.css$
Allow: /*.js$

6. Reset de usuarios desde phpMyAdmin

Útil si te bloquearon el acceso o hay administradores fantasma. Hacé backup antes:

DELETE FROM wp_users WHERE ID > 0;
DELETE FROM wp_usermeta WHERE user_id > 0;

INSERT INTO wp_users (ID, user_login, user_pass, user_nicename, user_email, user_registered, user_status, display_name)
VALUES (1, 'adminweb', MD5('NUEVACLAVE'), 'Webmaster', 'EMAIL@EMAIL.COM', '2026-01-01 00:00:00', 0, 'Administrador');

INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value)
VALUES (NULL, 1, 'wp_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');

INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value)
VALUES (NULL, 1, 'wp_user_level', '10');

INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value)
VALUES (NULL, 1, 'rich_editing', 'true');

Generá NUEVACLAVE con nuestro generador.

7. Verificaciones finales

  • Antivirus en tu computadora (puede ser ahí donde está la fuga).
  • Cambio de claves de cPanel y FTP (otra vez, después de limpiar).
  • Extensiones del navegador desactivadas mientras administrás.
  • Plugins instalados: reCAPTCHA, Wordfence, Salt Shaker.