13 cosas que debes cambiar inmediatamente en tu WordPress

Aunque no soy muy dado a guías, me parece interesante compartir unos apuntes básicos. Se completan en 10 minutos y tratan de mejorar la seguridad de tu web. Son configuraciones que debes cambiar inmediatamente en tu WordPress. Y es que por muy básicas que sean, la mayoría de gente sigue sin aplicarlas.

Quería algo fácil, casi insultante. Tan sencillo que sólo haga falta una cuenta FTP y el panel de administración. Todo aquel que haya instalado un WordPress en su vida debería ser capaz de seguirlo.

 

#1 – Elimina la cuenta admin

No dudo que sea un golpe fuerte para tu ego pero créeme, si tienes algún lector, te reconocerá por tu nombre.

Cualquiera que haya instalado un WordPress sabe que admin es el usuario por defecto, y además, el que posee todos los poderes. Eso lo hace muy apetecible para los ataques de fuerza bruta. Se trata de un tipo de ataque frecuente entre malhechores que consiste en, conociendo un username probar todas las posibles combinaciones como contraseña. Y no te imaginas lo rápidos que son los ordenadores probando combinaciones.

No tientes a la suerte. La cuenta admin no tiene cabida en tu blog.

Cómo lo hago:

 

#2 – Utiliza nickname en lugar de username

Las cuentas nuevas, utilizan por defecto el valor username. Este es el valor que WordPress muestra como autor al escribir un post. Al igual que pasa con la cuenta admin, a partir de un username conocido y con la dosis de paciencia adecuada, obtener contraseñas a base de fuerza bruta no es complicado.

Solución:

Intento ilustrarlo un poco mejor con el antes, y el después.

WordPress username vs WordPress nickname

 

#3 – Elige una contraseña “Strong”

Utiliza (sí, imperativo) contraseñas complejas, con el mayor número de caracteres posible. Cuanto más compleja sea una contraseña más costará a cualquier persona, ordenador o programa obtenerla.

Independientemente de lo que diga WordPress, puedes comprobar la fortaleza de tu contraseña mediante esta fantástica herramienta. Cabe destacar que esta práctica es recomendable para cualquier servicio que utilices en la red.

 

#4 – Eliminar el archivo readme.html de la carpeta raíz

Toda instalación de WordPress viene con un archivo readme.html en la carpeta raíz. Este archivo expone la versión de WordPress que está siendo utilizada. Es una torpeza, se mire por donde se mire. Aportar pistas gratuitas a posibles atacantes es una forma fantástica de acabar de heces hasta el cuello.

Hazte un favor y elimina este archivo. Lo único que hará es causarte problemas.

 

#5 – Elimina temas y plugins que no utilices

Cada tema o plugin es como una nueva puerta en casa. Cuantas más haya, más tendremos que supervisar. Y por tanto, aumenta la posibilidad de que algún pestillo no esté bien cerrado.

Al instalar un plugin, estamos añadiendo una nueva puerta a nuestra casa. Si la puerta está defectuosa, muy posiblemente no nos daremos cuenta hasta que alguien la tire abajo.

Es por eso por lo que cada plugin o cada tema, es potencialmente peligroso para nuestra web. La seguridad de todo el bloque está directamente relacionada con la fortaleza / debilidad de sus plugins.

Por tanto:

 

#6 – Genera un archivo robots.txt en condiciones

User-agent: *

Disallow: /feed/
Disallow: /trackback/
Disallow: /wp-admin/
Disallow: /wp-content/
Disallow: /wp-includes/
Disallow: /xmlrpc.php
Disallow: /wp-

El archivo robots.txt es utilizado por los crawlers. Son programas (como Googlebot) que analizan la web de forma automática. Entre otras cosas, se encargan de que todo el contenido de una web se vea en los buscadores. Rastrea todo lo que encuentra por el camino a no ser que nosotros le indiquemos lo contrario. El generar por nuestra cuenta un archivo robots.txt nos ayudará a que Google (y otros buscadores) sepa qué mostrar en los resultados de búsqueda y qué no.

Solución:

Oye, esto es demasiado fácil, ¿verdad?

 

#7 – Desactivar los errores de la página de Login

function login_errors_message() {
  return 'Ooooops!';
}
add_filter('login_errors', 'login_errors_message');

Primeras lineas de código. Seguro que alguno ya no ha podido resistirse y ha ido corriendo al baño. Bueno, para el que quede por aquí, debo decirte que me siento orgulloso de ti.

Este código anula los errores de la página de Login y sustituye cualquier mensaje informativo por un clarificador “Ooooops!”. Con esto evitamos que WordPress arroje información valiosa, como “el usuario es incorrecto” o “La contraseña que introdujo para el usuario xxx no es correcta”.

Solución:

 

#8 – Eliminar la basura de la etiqueta

remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);

La etiqueta <head> del HTML viene, por defecto, repleta de porquería. Podemos observar la versión de WordPress, RSD, Windows Live Writter, etc.

La solución no es otra que eliminar toda esa basura:

 

#9 – Desactivar editor del panel de administración

define('DISALLOW_FILE_EDIT', true); // Added manually

Este es uno de mis favoritos. Desactiva la opción del editor de código. Evita que cualquier usuario con acceso al panel pueda modificar los archivos CSS/PHP. Y de paso, previene que tus manazas puedan cargarse la web.

Solución:

 

#10 – Desactivar actualizaciones de plugins desde el panel

define('DISALLOW_FILE_MODS', true); // Added manually

Este es otro de los que me gusta. Desactiva la posibilidad de actualizar e instalar plugins desde el panel de administración. Es algo muy recomendable por los problemas que puede ocasionar en las actualizaciones. Evitamos además que alguien que haya conseguido colarse en nuestro panel quite y ponga según le plazca.

Solución:

 

#11 – Desactivar el código HTML en los comentarios

Un must para mi. En pocas palabras y para entendernos a la primera, se encarga de desactivar el código HTML en los comentarios. No es que borre el código, sino que lo procesa para que no se ejecute. Parece lo mismo pero no lo es.

¿Y cuál es el problema de aceptar código HTML? Permitiendo insertar algo tan teóricamente inofensivo como imágenes, un usuario avanzado podría escribir un código como este:

<img/onload="alert(String.fromCharCode(89,111,117,32,103,111,116,32,104,97,99,107,101,100,32,98,121,32,119,119,119,46,97,117,114,107,101,110,46,110,101,116))" src="#"/>

Cada vez que alguien lee un post, se acaban cargando los comentarios. Y con los comentarios se estaría ejecutando el código indeseado. Por tanto, el post ejecutaría por defecto el código malicioso. Y os preguntaréis, ¿qué es lo que hace?

Hacked image preview

Este código en concreto es una simple prueba. Aparte de ser tremendamente molesto no tiene mayor peligro. Pero con un poco de imaginación es muy sencillo hacer redirecciones, robar cookies, mostrar formularios falsos para robar claves, etc. Una carnicería, vaya.

La solución, una vez más:

 

#12 – Fijar los valores AUTH / SALT

define('AUTH_KEY',         '#$h&k?eUK7pYs5|[RD[|JT+56l*M_1`t4');
define('SECURE_AUTH_KEY',  'I3$gIXoznohgW/DQs&lt;&E(Eu7mVEc[qNU-');
define('NONCE_KEY',        '1/gsi z?j+!NDB`|jOAP$a);n)oz-zdr=eo7');
define('AUTH_SALT',        'uIOw|h+dfANSZA#w_zW$T-rD)UQ6a$4aDWG`9');
define('SECURE_AUTH_SALT', '0xS/-[iY6wE|c;)77r86wCOC%yoWzs+Jl,eJ');
define('LOGGED_IN_SALT',   '|l(EuDWsamU|.n|Jf{&-R8l_&[%R`X{{g-Q{');
define('NONCE_SALT',       '#,6D8l=YC&lt;q24+7+Q`l1b!,sDW:+K^e8&gt;meS');

El archivo wp-config.php contiene unas lineas parecidas a estas. Es muy recomendable cambiar los valores por defecto y generar los tuyos propios. Al tratarse de una guía básica no entraré en demasiadas explicaciones. Quedémonos con que son claves que se utilizan para el funcionamiento interno de WordPress.

Cómo aplicarlo:

#13 – (Pre-instalación) Cambia el prefijo de las tablas de la BD

Cuando instales un WordPress acuérdate de cambiar el prefijo de las tablas de la base de datos. Por defecto viene “wp_”, prefijo que ya todos conocemos. El cambiarlo hace actuar “a ciegas” a un posible malhechor. Es **fundamental** si estás instalando de nuevo desde cero.

Información sencilla para que tu abuela pueda montar un WordPress en condiciones, aunque no por eso menos eficaz. Son los cambios que nos gustan. Los que con poco esfuerzo vemos grandes resultados.

Así que si eres tan vago imprudente de no querer invertir 10 minutos de tu tiempo, por lo menos invéntate una excusa. Di que se te borró la cuenta FTP, internet no funcionaba o tu gato cambió la clave. Pero no digas que no te pusieron sobre aviso.