Los 3 modos más comunes de hackear WordPress y cómo evitarlo

WordPress es ya el CMS más utilizado y popular, y ese poder conlleva una responsabilidad, la de ser también el CMS más atacado por hackers que quieran hacerse con el control de tal o cual web … hecha con WordPress.

Y no te creas que si tu WordPress no es una web popular no sufrirá ataques, pues muchos de los “exploits” que se crean son para hacer webs zombie, y para eso les vale cualquiera.

De todos los modos que hay de hackear una web, los 3 que más se dan en WordPress, las principales vías de entrada para ataques, son las siguientes:

1. Temas y plugins sin actualizar

Instalar y actualizar temas y plugins en WordPress es muy fácil, y con el sistema de avisos de nuevas versiones integrado, salvo situaciones especiales, no hay motivos para no actualizarlos cuando hay nuevas versiones.

Además, la mayoría de las actualizaciones suelen ser por cuestiones de seguridad que podrían poner en peligro tu web, salvo cuando hay un cambio de versión mayor en WordPress, que entonces obliga a cambiar ciertos códigos en algunos plugins y temas. El resto de las ocasiones, especialmente en los temas, es prácticamente obligatorio actualizarlos.

Muchas veces hablamos de la conveniencia – o no – de los plugins y temas de pago, y una de sus ventajas debe ser el aliciente para el desarrollador de estar pendiente de nuevos ataques o “exploits” y actualizar su producto para solucionarlos, algo que con los temas y plugins gratuitos no siempre es así.

Soluciones

  • Mantén actualizado WordPress a la última versión
  • Mantén actualizados los plugins WordPress
  • Mantén actualizados los temas WordPress
  • Aprende los peligros de los plugins WordPress

Fácil ¿no?

2. Datos de acceso débiles


Actualmente puedes elegir el nombre de usuario administrador al instalar WordPress, y sino cambiarlo nada más terminar la instalación, pero aún hay muchos WordPress con el usuario por defecto de nombre admin, y con eso cualquier intruso ya tiene la mitad de la información para acceder a tu WordPress como administrador.

Si a esto le sumas una contraseña simple, fácil de adivinar o que uses en otros servicios online no siempre seguros, estás más que expuesto a posibles accesos no deseados. Es algo que debes solucionar lo antes posible.

Soluciones

3. Inyecciones en la base de datos

Este es quizás el método más empleado últimamente para hackear cualquier CMS, WordPress incluido, y lo malo es que no siempre depende de ti que las bases de datos estén seguras, pero al menos hemos de hacer nuestro trabajo para asegurarlas lo máximo posible.

Lo peor es que si un hacker entra en tu base de datos estás perdido del todo, puede hacer lo que sea, no hay límites. Además, luego limpiar una base de datos infectada es un absoluto horror, de lo peor que te puede ocurrir.

Soluciones

Y hasta aquí las 3 maneras más comunes en que suele haber hackeos de WordPress. Vamos a ver si tenemos ayudas genéricas …

Avisos de seguridad de Google

Es horrible cuando visitamos una web y Google nos avisa de que es insegura y puede infectar nuestro sistema, pero para el webmaster es, al menos, un aviso de que algo ha pasado.

Para ello es fundamental que tengas una cuenta en Google Webmaster Tools para gestionar ahí tus webs y poder tener avisos de seguridad e incluso instrucciones de como solucionar intrusiones. Además, Google ya te avisa incluso de cuando tienes que actualizar WordPress.

Luego, en su mismo panel puedes avisarle a Google de que tu sitio está limpio y quitará, tras comprobarlo, el molesto aviso.

¿Cómo evitar problemas de seguridad en WordPress?

Todo esto, como ves está muy bien pero ¿como evito este tipo de intrusiones, hackeos e inyecciones de código?, pues siendo exhaustivo en los básicos, que no me cansaré de repetir:

  • Mantener WordPress actualizado a la última versión, única garantía de control de vulnerabilidades conocidas.
  • Instalar solamente plugins seguros, a ser posible desde el repositorio oficial.
  • Instalar solamente temas seguros, a ser posible desde el repositorio oficial.
  • Asegura WordPress con plugins especializados
  • Revisar la sección de seguridad de Ayuda WordPress para comprobar que has realizado todas las acciones de seguridad necesarias.
  • Suscribirte al feed de Ayuda WordPress para estar informado de las alertas de seguridad.

Servicios WordPress seguros

Ahora bien, si no quieres preocuparte de la seguridad de tu WordPress, siempre puedes recurrir a servicios que te quiten de problemas:

  1. Utiliza un WordPress administrado como WordPress.com, simplemente escribes y te olvidas de todo
  2. Haz backup de todo, tienes muchos plugins que automatizan las copias de seguridad diarias, para casos de desastre
  3. Contrata un hosting especializado en WordPress que haga copia de seguridad automática de tu sitio
  4. Install a premium plugin which automatically creates a full backup and sends it to a storage location of your choice.

Para finalizar, y a pesar de que este tipo de artículos a veces acojonan un poco, WordPress es el CMS más seguro.

Hiberna WordPress en modo solo lectura

Esta es otra de esas cosas que uno siempre piensa que debería ser posible y ni imagina que ya está disponible, me refiero a la posibilidad de poner WordPress un modo hibernación, de manera que tu web admita visitas e incluso acceso al Escritorio de usuarios registrados mientras realizas tareas de mantenimiento, pero sin peligro de que nadie toque nada.

Alguno me dirá que puedes servir la web entera desde la cache pero no me refiero a eso, sino a tener todo tu WordPress accesible para los visitantes y usuarios registrados pero sin que nadie pueda introducir cambios mientras realizas acciones importantes.

Para esto es para lo que ha nacido Code Freeze, una absoluta maravilla de plugin que, mientras está activo …

  • Desactiva añadir, editar o borrar contenido, archivos, temas, etc
  • Desactiva instalar, activar, desactivar, actualizar o borrar plugins (excepto el mismo)
  • Desactiva comentarios y trackbacks en todos los contenidos
  • Quita el widget “Publicación rápida” y avisos de actualizaciones de WordPress o plugins
  • Ofrece un aviso en el Escritorio para que los usuarios sepan que cualquier cambio que hagan se perderá mientras esté activo
  • Ofrece acceso “solo lectura” al Escritorio

Esto afecta a todos los usuarios, incluidos los administradores, y es perfecto en situaciones de mantenimiento, como cambios de DNS, de alojamiento o dominio, o simplemente cualquier situación en que quieras “hibernar” tu WordPress para que  nadie haga cambios hasta que tu mismo lo decidas.

Cuando haya pasado la situación que requirió el uso del plugin Code Freeze simplemente lo desactivas y todo vuelve a la normalidad, sin tablas añadidas a tu base de datos y todo de vuelta a la normalidad.

¡Mooola mil!

Añadir target=”_blank” a todos los enlaces

Por supuesto, hay plugins para convertir todos los enlaces de manera que se abran en nueva ventana o pestaña pero ¿para qué usar plugins cuando puedes hacerlo con una simple función?.

Si eres de los que te gusta que los enlaces sean ‘target="_blank"‘ y no quieres andar modificando cada enlace puedes añadir esta función a tu plugin de funciones o fichero functions.php de tu tema activo:

// Abrir todos los enlaces en ventana nueva
function autoblank($text) {
	$return = str_replace('<a', '<a target="_blank"', $text);
	return $return;
}
add_filter('the_content', 'autoblank');

Guardas los cambios y ya tienes lo que buscabas, todos los enlaces del contenido de las entradas se abrirán en una nueva ventana (o pestaña) del navegador.

Cómo activar entradas destacadas en Twenty Eleven

El tema por defecto de WordPress, Twenty Eleven, tiene incorporada la funcionalidad de entradas destacadas, que las mostrará en un deslizador, pero no es obvio su uso.

Si quieres aprovechar esta funcionalidad no hay ajuste que modificar ni opción que activar, solo tienes que tener en cuenta lo siguiente para activarla:

  1. Crea una nueva página usando como plantilla la denominada “Showcase template” en el widget de “Atributos de página”
  2. En “Ajustes de lectura” de tu WordPress elige mostrar una página estática en portada, y eliges la página recién creada con la plantilla showcase
  3. Marca como “sticky” las entradas que quieres que aparezcan en el deslizador
  4. Añade una imagen destacada en la entrada, que será la que se mostrará en el deslizador. Si la imagen es del tamaño máximo (1000×288 pixels) o mayor se mostrará como fondo del área del deslizador, con el título de la entrada sobre la misma. Si es menor aparecerá a la derecha del área, con el título y el extracto a la izquierda de la misma. También debes saber que si la imagen destacada es igual o mayor que el tamaño máximo, en la plantilla de entrada simple esta reemplazará la imagen de cabecera

Hasta aquí como activar el deslizador, pero este tiene una característica que puedes cambiar. Y es que por defecto no tiene movimiento automático, sino que se muestran unos puntos en los que debes hacer clic para cambiar de una entrada destacada (sticky) a otra.

Si quieres que el deslizador avance automáticamente debes añadir un poco de código, este:

<script type="text/javascript" charset="utf-8">
    // Avance automático del deslizador de Twenty Eleven
    // Fuente: http://pastebin.com/s6JEthVi
    jQuery(document).ready(function(){
        var change_every = 10; // Los segundos que el deslizador tardará en hacer el avance automático
        var current = 1;
        function auto_advance(){
            if(current == -1) return false;
            jQuery('.feature-slider a').eq(current % jQuery('.feature-slider a').length).trigger('click', [true]);
            current++;
        };
        setInterval(function(){auto_advance()}, change_every * 1000);
    });
</script>

Este código debes añadirlo, bien en la plantilla de página de “showcase” o si lo prefieres en el widget de “showcase”, pero sin ponerle título, funcionará igual.

Nota: este truco último no funciona en wordpress.com, pues está limitada la inserción de código script

Saluda a tus lectores habituales y a los nuevos

¿A que te gusta que en la cafetería te reconozcan por tu nombre y te preparen el café como te gusta?, pues lo mismo tienes tu que hacer con tus lectores del blog.

Si quieres agradecer a tus lectores habituales la visita y saludarles, y a los nuevos animarles a seguir leyéndote, con algún mensaje personalizado, puedes hacerlo muy fácil.

Y no me refiero a usuarios registrados, que eso ya lo vimos, sino a simples visitantes …

Solo tienes que elegir el lugar del tema en el que colocar este código y personalizarlo un poco a tu gusto:

<?php
if(isset($_COOKIE['comment_author_'.COOKIEHASH])) {
	$lastCommenter = $_COOKIE['comment_author_'.COOKIEHASH];
	echo "¡Bienvenido de nuevo querido lector, espero que disfrutes hoy de mis artículos! ". $lastCommenter ."!";
} else {
	echo "¡Vaya! parece que eres nuevo por aquí, pasa y lee, si no encuentras algo usa el buscador.";
}
?>

Un par de buenos lugares para poner un código así sería antes del loop en index.php y en single.php, por ejemplo, pero tu decides.

Redirección para accesos fallidos en WordPress

Normalmente, si un usuario falla al tratar de acceder en WordPress le devuelve a la misma pantalla con un mensaje de error, que ya aprendimos a modificar para evitar dar pistas a hackers, pero ¿y si quieres enviar al usuario torpe a una página de error distinta?.

Se me ocurre, por ejemplo, enviarle a una página de contacto para que reclame la clave, o incluso a una página en la que ofrecerle servicios personalizados para usuarios registrados. Bueno, lo que sea que se te ocurra.

Si quieres redirigir a los usuarios que acceden a tu WordPress a una página concreta puedes usar la función de login de WordPress, que puedes añadir donde te guste, por ejemplo en un widget de texto, pero con un modificador que la envíe a una URL a tu elección, algo así:

wp_login_form(array( 'redirect' => site_url() ));  // en este caso le mandas a la portada de tu web de nuevo

Ahora bien, como he dicho, esto es para los accesos exitosos, cuando el usuario introduce bien sus datos. Pero si lo que quieres es hacer justo lo que comentaba antes, hacer redirección cuando se equivocan, y lo ideal es que esto pase en la pantalla de acceso habitual de WordPress, entonces lo que tienes que hacer es añadir el siguiente código a tu plugin de funciones o archivo functions.php del tema activo:

add_action( 'wp_login_failed', 'my_front_end_login_fail' );  // hook para el accesso fallido

function my_front_end_login_fail( $username ) {
     $referrer = $_SERVER['HTTP_REFERER'];  // ¿de donde viene?
     // si hay una referencia válida, y no es la pantalla de acceso por defecto
     if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) {
          wp_redirect( $referrer . '?login=failed' );  // le añadimos algo de información (login-failed) a la URL del tema en uso
          exit;
     }
}

Ya solo te queda guardar los cambios y probar que funciona.

¿Qué tema WordPress usa esa web?

Es una de las preguntas más leídas en los foros WordPress, la que provoca la curiosidad cuando vemos una web que nos gusta y nos preguntamos ¿Qué tema WordPress usa esa web?.

Y, aunque no es fácil siempre adivinar el tema que usa una web, pues en muchas ocasiones se cambian referencias al mismo, si tenemos algunos trucos para tratar de adivinarlo cuando no hay ninguna referencia al tema usado en la misma web, algo bastante común.

1. Ver código fuente

El primer método para adivinar el tema que suelo usar es ver el código fuente de la web en cuestión. Desde el clic derecho de cualquier navegador moderno tenemos acceso a ver el código de la web que estamos visualizando, y una simple búsqueda por la cadena “wp-content/themes/” nos “soplará” el nombre de la carpeta del tema activo en la primera referencia al mismo, que normalmente suele estar en la cabecera del código, en la llamada a la hoja de estilos …

ver tema 2 ver tema 1

2. Inspeccionar elemento de cabecera de hoja de estilos

Un método similar es acceder a la utilidad de inspección de elementos web de los navegadores modernos, o Firebug si usas Firefox, mediante la cual puedes hacer clic en la hoja de estilos y, directamente, ver toda la información de la cabecera de la misma donde, salvo que se haya modificado, tendrás el nombre, descripción y hasta URL de la web del autor del tema.

3. WWTIT

Quizás basado en este método, está el servicio web llamado “What WordPress theme is that?“. Pones la url en la caja de búsqueda y te muestra precisamente esta información de cabecera de la hoja de estilos que todos los temas WordPress usan.

Por supuesto, ninguno de estos métodos anteriores sirve de nada si el administrador o diseñador de la web cambió el nombre de carpeta del tema y la información de cabecera de la hoja de estilos.

4. Clases CSS distintivas

Si este fuera el caso hay alguna cosa que puedes probar. Por ejemplo, usando el método 3 descrito anteriormente, busca una clase CSS exclusiva del tema, que no sea la típica “post” o “content“, sino una con nombres extraños, del gusto de muchos diseñadores.

Una vez identificada una que no sea “corriente” solo tienes que “googlear” por esa clase y, con un poco de suerte, identificar alguna consulta de soporte en foros donde, ya si, se cite el nombre del tema, o incluso la página de soporte del autor.

Y, bueno, esto es lo que yo suelo hacer, si tu tienes algún otro método se agradecerá que lo compartas

Nota: para las capturas he usado la web de mi muy mejor amiga Ana Aldea

Relevanssi, buscador de WordPress vitaminado

El buscador integrado de WordPress quizás no sea su mejor característica. Ya sabes que, por ejemplo, solo busca en títulos y texto de las entradas, sin incluir contenido de extractos, comentarios o incluso tags y categorías.

Pues bien, si quieres darle un revitalizante a las búsquedas de WordPress Relevanssi es una muy buena opción. Tanto en sus versiones gratuita o de pago, ofrece muchas mejoras sobre el buscador nativo de WordPress, así que no pierdas nada, al contrario, probándolo.

Para que te hagas una idea aquí tienes una tabla con las diferencias entre el buscador interno de WordPress y las versiones gratuita, premium y custom de Relevanssi:

Funcionalidad WordPress Relevanssi Free Relevanssi Premium Relevanssi Custom
Fácil de instalar X X X X
El índice se actualiza automáticamente X X X X
Primero las entradas más recientes x X X X
Primero los mejores resultados - X X X
Busca en entradas y páginas X X X X
Busca en comentarios y autores de comentarios - X X X
Busca en categorías, tags y taxonomías personalizadas de entrada - X X X
Busca en campos personalizados - X X X
Busca en el contenido de shorcodes - X X X
Busca en los extractos - X X X
Busca en los perfiles de usuario - - X X
Busca en páginas de taxonomías - - X X
Busca en columnas arbitrarias de MySQL en wp_posts - - X X
Muestra sugerencias del tipo “¿Te referías a esto?” - X X X
Resalta los resultados encontrados - X X X
Resalta los resultados en el contenido de las entradas - X X X
Resalta resultados tanto en tu WordPress como en resultados de Google - - X X
Posibilidad de restringir a entradas, categorías o tags - X X X
Opciones de ajuste fino de búsqueda - X X X
Elegir entre operadores AND y OR al buscar - X X X
Ajuste del peso de títulos, comentarios y tags - X X X
Ajuste el peso por tipo de entrada - - X X
Ajuste del peso por taxonomía - - X X
Ajuste del peso por fecha de publicación - - X X
Ajuste del peso manualmente mediante filtros - - X X
Registro de búsquedas por usuario - X X X
Uso de palabras tope para refinar las búsquedas - X X X
Expande queries con sinónimos - X X X
Cache de resultados de búsqueda - X X X
Integración con WPML - X X X
Soporte de WordPress Multisitiio - - X X
Ajustes para mejorar búsquedas en bases de datos grandes - - X X
Ajustes de exportación e importación - - X X
Soporte de Mikko - - X X
Entradas destacadas en búsquedas basadas en términos de búsqueda - - - X
Orden de resultados primero por categoría y luego por relevancia - - - X

Vamos, que las posibilidades que ofrece son más que interesantes, aún en la versión gratuita, no digamos en las otras. ¿Lo has probado?

Repara la base de datos de WordPress, desde WordPress

Seguramente ya sabes que la base de datos eventualmente se llena de porquería, muchas veces hay que hacer borrado de restos en la base de datos, pero la mayoría de las veces una simple reparación de las tablas soluciona problemas como el terrible y odiado “ERROR AL ESTABLECER CONEXIÓN CON LA BASE DE DATOS DE WORDPRESS“.

A través de PHPmyAdmin puedes seleccionar las tablas y reparar la base de datos, pero desde no hace mucho también tenemos la posibilidad de reparar la base de datos de WordPress desde el mismo WordPress.

Solo tienes que tener acceso al fichero wp-config.php, al que añadirás la siguiente línea:

define('WP_ALLOW_REPAIR', true);

Una vez guardes los cambios accedes a la dirección http://misitio.com/wp-admin/maint/repair.php y verás la siguiente pantalla:

Simplemente haces clic en “Reparar base de datos” o en “Reparar y optimizar la base de datos” y en un rápido proceso tendrás tu WordPress fino y seguro.

Eso si, al finalizar quita la línea de código que añadiste al archivo wp-config.php para evitar que esa página la utilicen usuarios sin autorización.

Repara la base de datos de WordPress, desde WordPress

Seguramente ya sabes que la base de datos eventualmente se llena de porquería, muchas veces hay que hacer borrado de restos en la base de datos, pero la mayoría de las veces una simple reparación de las tablas soluciona problemas como el terrible y odiado “ERROR AL ESTABLECER CONEXIÓN CON LA BASE DE DATOS DE WORDPRESS“.

A través de PHPmyAdmin puedes seleccionar las tablas y reparar la base de datos, pero desde no hace mucho también tenemos la posibilidad de reparar la base de datos de WordPress desde el mismo WordPress.

Solo tienes que tener acceso al fichero wp-config.php, al que añadirás la siguiente línea:

define('WP_ALLOW_REPAIR', true);

Una vez guardes los cambios accedes a la dirección http://misitio.com/wp-admin/maint/repair.php y verás la siguiente pantalla:

Simplemente haces clic en “Reparar base de datos” o en “Reparar y optimizar la base de datos” y en un rápido proceso tendrás tu WordPress fino y seguro.

Eso si, al finalizar quita la línea de código que añadiste al archivo wp-config.php para evitar que esa página la utilicen usuarios sin autorización.