Seguridad en WordPress: Consejos y plugins

Los fallos de seguridad en nuestra web pueden echar a perder el trabajo de mucho tiempo e influir en nuestro posicionamiento y credibilidad en la red si no actuamos a tiempo. Por ello es importante destacar la importancia de la prevención, pues tal y como sucede con nuestros ordenadores, una vez que ha actuado el virus/hacker/troyano la solución suele ser más costosa y en algunos casos los daños son difícilmente reparables.

En esta ocasión vamos a centrarnos en WordPress, aunque muchos de los consejos que daremos son validos para cualquier tipo de CMS.

Un primer consejo importante es que siempre trabajemos con archivos originales, con esto me refiero a no descargarnos temas y plugins piratas pues en un 99% de los casos traen algún tipo de malware incorporado que suele ser difícil de detectar. Otro aspecto crucial es que nuestro ordenador esté libre de virus y troyanos pues estos pueden tener acceso a nuestro FTP y subir al servidor. También es importante tener controlado quien tiene acceso al FTP de nuestro servidor, no es recomendable darle acceso al cliente pues no podemos controlar su ordenador y saber si cumple los requisitos mínimos de seguridad. Si es absolutamente necesario que tenga acceso, debemos advertirle y aconsejarle para evitar en la medida de lo posible que haya problemas.

Hay 3 aspectos básicos en WordPress que si los tenemos presentes tendremos gran parte del trabajo hecho:

1. Actualizar temas y plugins: Tal y como sucede con Windows en WordPress muchas de las actualizaciones que salen son por cuestiones de seguridad y lo mismo sucede con los plugins. Si no mantenemos esto al día tenemos muchas más posibilidades de sufrir ataques que se benefician de exploits que ya se han solucionado en las nuevas versiones de WordPress.

2. Datos de Acceso: Es muy importante utilizar usuarios y contraseñas fuertes, así como cambiarlos periódicamente. Si usas como usuario «admin» por defecto, el hacker ya tiene el 50% del trabajo hecho, si a eso le unimos contraseñas sencillas que repetimos una y otra vez estamos dando muchas facilidades.

3. Base de datos : Actualmente es uno de los metodos más extendidos para atacar una web y las consecuencias pueden ser un autentico desastre. Por ello es importante tomar algunas medidas básicas que después veremos, como cambiar el prefijo por defecto de las bases de datos y protegerlas a través del archivo .htaccess

Una vez resumidos estos problemas véamos de modo práctico y sencillo como encontrar solución a estos problemas. Hay muchos plugins que pueden ayudarnos en esta tarea pero personalmente creo que hay dos fundamentales mediante los cuales podemos optimizar y monitorizar la seguridad de nuestro WordPress: Ultimate Security Checker y Bulletproof Security. Con estas dos herramientas y algunos cambios que haremos sobre nuestro site podremos tener una web segura.

 

El primer paso sería intalar y activar Ultimate Security Checker en el panel de WordPress. Este plugin resulta muy útil pues nos va a dar una visión general de todos los problemas de seguridad que presenta nuestra web. Para ello debemos ejecutar el test de seguridad que nos indicará todos los puntos que debemos mejorar de nuestro site. También nos dará una puntuación entre 0 y 115 según el grado de fiabilidad del site. Desde el menú File Analysis podemos realizar un análisis de todos los archivos del site, de manera que el plugin nos señalará las posibles vulnerabilidades o códigos indeseados que puedan haberse colado en la web. Aparte de todo esto, tenemos un apartado llamado How to fix desde el que se explican las soluciones a los problemas que presente nuestra instalación de WordPress. Por último es interesante tener en cuenta que el plugin cuenta con la posibilidad de solucionar la mayoría de los problemas de forma automatizada, para ello cuenta con una versión gratuita limitada a un sitio web y otras versiones de pago que nos permiten implementarlo en múltiples sitios.

Los resultados de Ultimate Security Checker variaran mucho de un sitio a otro pero vamos a ver un ejemplo de una página con bastantes problemas de seguridad para que nos sirva de referencia:

Cómo podemos ver el resultado desvela muchas deficiencias de seguridad, la puntuación es de 55 puntos y grado D. Con algunos sencillo ajuste veremos como mejora de forma sustancial nuestra valoración. Si nos fijamos en el primer apartado «check for updates» vemos que tal y como comentábamos antes es fundamental actualizar la versión de wordpress así como los temas y plugins que tengamos instalados, estén activos o no. Una vez hagamos esto nuestra seguridad habrá ganado muchos enteros.

En el siguiente paso «Check configuration file» encontramos dos problemas, el primero es que nuestro archivo wp-config esta en la carpeta por defecto de wordpress, solucionarlo es tan fácil como entrar en nuestro FTP y mover el archivo wp-config.php a la raiz del sitio, fuera de la carpeta www, public_html o cómo se llame según el servidor que tengamos. El segundo punto nos indica la necesidad de deshabilitar el editor interno que posee wordpress para modificar temas y plugins, para ello debemos introducir el siguiente código en nuestro archivo wp-config.php:

[crayon]

define(‘DISALLOW_FILE_EDIT’,true);

[/crayon]

En el punto «Code check» nos indica varios problemas:

1. Hay que eliminar el archivo readme.html que se encuentra en la carpeta principal de WordPress y permite a los hackers conocer nuestra versión del CMS.

2. Hay que eliminar el script de instalación de WordPress que se encuentra dentro de la carpeta wp-admin/ bajo el nombre install.php, pues también facilita información sensible sobre nuestro site a posibles atacantes.

En el siguiente apartado «Files & folders permission check» nos advierte de que nuestro archivo wp-config puede ser leido por otros, esto tiene fácil solución, simplemente le cambiamos los permisos desde nuestro gestor FTP a 644. En cuanto a la seguridad de n uestro archivo .htaccess hay muchos tutoriales al respecto pero personalmente suelo echar mano del plugin Bulletproof Security no ya porque genere un archivo .htaccess extraordinariamente seguro sino por la cantidad de carcaterísticas de seguridad que posee que lo convierten desde mi punto de vista en el mejor y más avanzado plugin de seguridad para wordpress:

– Bloqueo de inyecciones SQL mediante .htaccess
– Hacking mediante XSS bloqueado mediante .htaccess
– Protección del wp-config.php mediante .htaccess
– Protección de php.ini y php5.ini desde .htaccess
– Protección de archivos readme.html y wp-admin/install.php
– No permite indexación ni listado de directorios mediante -indexes
– Deniega la visualización de errores en la base de datos
– Deniega la visualización de la versión WP y el metatag generator de éste
– Comprueba la existencia del usuario admin
– Chequea todos los permisos de las carpetas
– Permite realizar copias de seguridad y recuperación online de los ficheros .htaccess
– Permite dejar wordpress en modo mantenimiento de forma segura

Una vez instalemos y activemos el plugin lo que debemos hacer es activar dentro del panel del plugin todos los modos de seguridad BulletProof Mode (Guía de instalación y ayuda de BPS) para el archivo .htaccess, previamente habremos usado los botones automagic para crear un archivo .htaccess seguro.

Por último nos queda el apartado «Database Check» que nos indica varios fallos de seguridad, el más sencillo de solucionar es cambiar el usuario admin por otro nombre más seguro, para ello debemos seguir los siguientes pasos:

1. Acceder a phpmyadmin desde el panel de administración del hosting
2. Ya en phpmyadmin, seleccionar la base de datos de la página
3. Hacer click en la pestaña SQL para abrir una ventana en donde insertaremos la siguiente consulta:

[crayon]

UPDATE wp_users SET user_login = ‘nuevo-nombre-de-usuario’ WHERE user_login = ‘Admin’;

[/crayon]

Para finalizar nos quedaría cambiar el prefijo por defecto de la base de datos de WordPress, esto lleva algo más de trabajo:

1. Modificar el archivo wp-config.php: Debemos buscar la línea

[crayon]

$table_prefix = ‘wp_’;

[/crayon] y cambiar este prefijo wp_ por lo que queramos, cuanto más compleja sea la cadena que utilicemos más difícil se lo pondremos a los hackers, por ejemplo 55Rs34MdT, de manera que la líne quedaría como:

[crayon]

$table_prefix = ’55Rs34MdT_’;

[/crayon]

2. Cambiar los nombres de las tablas en la base de datos: Para ello debemos volver a phpMyAdmin (importante hacer un backup de la base de datos antes de hacer nada por si la liamos) y hacer la siguiente consulta SQL:

[crayon]

RENAME table `wp_commentmeta` TO `55Rs34MdT_commentmeta`;

RENAME table `wp_comments` TO `55Rs34MdT_comments`;

RENAME table `wp_links` TO `55Rs34MdT_links`;

RENAME table `wp_options` TO `55Rs34MdT_options`;

RENAME table `wp_postmeta` TO `55Rs34MdT_postmeta`;

RENAME table `wp_posts` TO `55Rs34MdT_posts`;

RENAME table `wp_terms` TO `55Rs34MdT_terms`;

RENAME table `wp_term_relationships` TO `55Rs34MdT_term_relationships`;

RENAME table `wp_term_taxonomy` TO `55Rs34MdT_term_taxonomy`;

RENAME table `wp_usermeta` TO `55Rs34MdT_usermeta`;

RENAME table `wp_users` TO `55Rs34MdT_users`;
[/crayon]

3. Actualizar la tabla wp_options:

Para ello generamos la siguiente consulta SQL

[crayon]

SELECT * FROM `55Rs34MdT_options` WHERE `option_name` LIKE ‘%wp_%’

[/crayon]

4. Modicar la tabla wp_usermeta y wp_user_roles:

La última consulta SQL y terminamos:

[crayon]

SELECT * FROM `55Rs34MdT_usermeta` WHERE `meta_key` LIKE ‘%wp_%’

[/crayon] [crayon]

UPDATE `55Rs34MdT_usermeta` SET `meta_key` = REPLACE( `meta_key` , ‘wp_’, ’55Rs34MdT_’ ); UPDATE `55Rs34MdT_options` SET `option_name` = ’55Rs34MdT_user_roles’ WHERE `option_name` = ‘wp_user_roles’;

[/crayon]

Si hemos seguido todos los pasos correctamente nuestra web debería haber mejorado considerablemente su seguridad, para comprobarlo podemos volver a hacer un chequeo con Ultimate Security Checker y el resultado debería ser parecido al de esta imagen:


Vemos que en este caso ya hemos conseguido una puntuación de 105, no es la máxima porque algunos de los plugins no se pudieron actualizar por las modificaciones que se habían implementado y porque el plugin detecta como sospechosos algunos códigos del tema que en realidad son ajustes fiables realizados por mi. En todo caso ya contamos con una web que cumple los requisitos mínimos de seguridad, si bien es cierto que ningún sistema es infalible, cuantas más trabas establezcamos más dificil se lo pondremos a quienes traten de violar nuestra seguridad.