Sus visitantes acaban en una página de lotería, de farmacia o de falso soporte técnico, y usted ve su web con normalidad. Es la firma de una redirección inyectada, en la mayoría de los casos condicional. Esta guía explica cómo reproducirla, encontrarla en los archivos o en la base de datos, y cerrar el acceso que sirvió para instalarla.
wp-config.php..htaccess, los archivos PHP, la base de datos y los ajustes de dirección del sitio.wp-content/uploads, plugins que reinstalar o eliminar.Una redirección instalada durante un hackeo elige a quién se aplica. En la mayoría de los casos deja tranquila a la persona que gestiona el sitio, para seguir activa el mayor tiempo posible. Las condiciones más habituales:
Referer de la petición.User-Agent.Un mensaje de un cliente que dice «su web me manda a otro sitio» merece tomarse en serio, aunque todo se vea bien en su pantalla.
Póngase en el lugar del visitante que la sufre:
Si tiene acceso a un terminal, este comando pide su página de inicio haciéndose pasar por un iPhone que llega desde Google:
curl -s -i -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" -e "https://www.google.com/" https://www.su-sitio.com/
Lea las primeras líneas de la respuesta. Un código 301 o 302 seguido de una línea Location: hacia una dirección desconocida indica una redirección hecha por el servidor: está en .htaccess o en un archivo PHP. Un código 200 mientras el navegador sí es redirigido indica una redirección hecha dentro de la página, en JavaScript: suele estar en la base de datos o en un archivo del tema.
wp-config.php, constante DB_PASSWORD) y, después, cada cuenta de administrador de WordPress.AUTH_KEY a NONCE_SALT de wp-config.php por un juego nuevo, generado en https://api.wordpress.org/secret-key/1.1/salt/. Todas las sesiones abiertas se cierran, incluida la del intruso.wp config shuffle-salts
En la raíz del sitio, y a veces en una subcarpeta, .htaccess puede recibir reglas de reescritura añadidas por el intruso. El bloque que escribe el propio WordPress es corto, y va entre # BEGIN WordPress y # END WordPress:
# BEGIN WordPress
# Las directivas (líneas) entre «BEGIN WordPress» y «END WordPress» son
# generadas dinámicamente y solo deberían ser modificadas mediante filtros de WordPress.
# Cualquier cambio en las directivas que hay entre esos marcadores serán sobrescritas.
<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
Una regla RewriteCond que comprueba %{HTTP_REFERER} (google, bing, facebook) o %{HTTP_USER_AGENT} (android, iphone, mobile), seguida de una RewriteRule hacia una dirección externa, es la redirección. Los plugins de caché y de seguridad también escriben sus propios bloques, marcados con su nombre: compare cada bloque con la lista de sus plugins antes de retirarlo.
WP-CLI compara los archivos del núcleo de WordPress y de los plugins con las sumas de verificación que publica WordPress.org, y lista cada archivo modificado o añadido:
wp core verify-checksums
wp plugin verify-checksums --all
El segundo comando cubre los plugins distribuidos por el directorio de WordPress.org. Un plugin comprado a su desarrollador se compara con una copia recién descargada desde su cuenta en la web del desarrollador. Es un caso frecuente: de los 540 sitios WordPress de pymes de nuestro análisis del 1 de septiembre de 2026, el 66 % lleva al menos un plugin ausente del directorio público.
Sin WP-CLI, dos búsquedas dan una primera criba:
find . -name "*.php" -mtime -30
find wp-content/uploads -name "*.php"
La primera lista los archivos PHP modificados en los últimos 30 días; la segunda, los archivos PHP guardados en la carpeta de medios, donde son sospechosos por defecto (algunos plugins dejan ahí un index.php vacío, que es legítimo). Una fecha de modificación se puede falsificar: un archivo antiguo sigue mereciendo un examen si está en el lugar equivocado.
Abra primero wp-config.php, el index.php de la raíz, el functions.php y el header.php del tema activo, y la carpeta wp-content/mu-plugins: los plugins que contiene se cargan siempre y no se pueden desactivar desde la administración. Las señales que buscar: eval(, base64_decode(, gzinflate(, str_rot13(, cadenas largas ilegibles, o window.location seguido de una dirección que usted no conoce.
Una redirección en JavaScript se inserta a menudo en el contenido de las páginas o en los ajustes, donde ningún archivo la muestra. WP-CLI busca una cadena en todas las tablas de WordPress:
wp db search "<script"
wp db search "fromCharCode"
Sin WP-CLI, las mismas búsquedas se lanzan en phpMyAdmin, pestaña SQL:
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%';
SELECT option_name FROM wp_options WHERE option_value LIKE '%<script%';
Algunos resultados son legítimos: una herramienta de analítica, un banner de cookies o un widget que usted ha añadido. Lo que no corresponde a nada de lo que ha instalado merece un examen, en especial un script que construye una dirección a partir de códigos de caracteres.
En Ajustes > Generales, «Dirección de WordPress (URL)» y «Dirección del sitio (URL)» deben llevar su dominio. Los mismos valores pueden imponerse en wp-config.php con las constantes WP_HOME y WP_SITEURL: compruebe los dos lugares.
wp option get home
wp option get siteurl
wp user list --role=administrator
Cuando las constantes están definidas, los dos primeros comandos devuelven su valor. El último lista los administradores con su fecha de registro; en la administración, la misma lista se obtiene desde el menú Usuarios, con el filtro Administrador. Una cuenta que nadie reconoce se elimina, atribuyendo su contenido a una cuenta legítima.
Borrar la línea que redirige detiene el síntoma. El acceso que usó el intruso sigue abierto mientras no se encuentre, y la redirección vuelve en los días siguientes. El orden que funciona:
wp-admin y wp-includes y lance después wp core download --skip-content --force, que reescribe el núcleo sin tocar sus plugins, temas y medios. El comando sobrescribe los archivos existentes, pero no elimina ningún archivo añadido: por eso las dos carpetas se eliminan primero, y por eso los archivos PHP desconocidos de la raíz se retiran a mano.wp-content/uploads, las reglas añadidas a .htaccess y los scripts encontrados en la base de datos.wp cron event list: una tarea con un nombre desconocido puede volver a instalar el código.Si el sitio guarda datos personales (formularios, cuentas de clientes, pedidos), anote la hora a la que detectó el hackeo. En la Unión Europea, el RGPD prevé notificar una violación de la seguridad de los datos personales a la autoridad de control a más tardar 72 horas después de haber tenido constancia de ella, a menos que sea improbable que dicha violación constituya un riesgo para los derechos y las libertades de las personas físicas.
Cuando Google detecta la redirección, Chrome puede mostrar una página roja «Sitio peligroso» antes de abrir el sitio, y Google puede escribir bajo su resultado «Este sitio puede haber sido pirateado». El informe Problemas de seguridad de Google Search Console indica lo que se ha detectado y en qué direcciones. Una vez limpio el sitio, el botón Solicitar revisión pone en marcha la comprobación.
Una redirección retirada deja una pregunta: ¿quién se ocupa del sitio a partir de ahora? Simafri retoma su sitio WordPress, lo pone de nuevo en línea sobre una base que alojamos, protegemos y mantenemos al día, y se ocupa de él mes tras mes. Usted conserva su nombre de dominio y su contenido.
El código inyectado lee el User-Agent del navegador y solo redirige a los teléfonos. La persona que gestiona el sitio, a menudo desde un ordenador, no ve nada. Haga la prueba desde un teléfono con datos móviles, o con curl enviando el identificador de un navegador móvil.
Reinstalar el núcleo reescribe los archivos de WordPress, sin eliminar los que un intruso haya podido añadir. La base de datos, el tema, los plugins y la carpeta de medios quedan como estaban, y es ahí donde suelen encontrarse la redirección y el acceso del intruso. El núcleo nuevo es un paso de la limpieza, que se completa con la base de datos, los plugins, las cuentas y las contraseñas.
Porque el acceso que sirvió para instalarla sigue ahí: una cuenta de administrador añadida, un archivo PHP escondido entre los medios, una tarea programada, un plugin vulnerable. Cada uno permite volver a instalar el código después de la limpieza. Revise las cuentas, la carpeta wp-content/uploads, las tareas programadas y las versiones de los plugins, y cambie de nuevo las contraseñas.
Abra Google Search Console y el informe Problemas de seguridad: lista los problemas detectados y ejemplos de URL afectadas. Si el sitio aún no está verificado en Search Console, la verificación mediante un registro DNS cubre todo el dominio.
Simafri
Hablemos de su proyecto
Díganos en pocas palabras lo que necesita: le respondemos rápidamente.
¡Gracias! Su solicitud ha sido enviada. Le responderemos en breve.
¿Prefiere el correo? Escríbanos a support@simafri.com.