Qué debes cambiar en las instalación de WordPress

#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:

  • Crea un usuario nuevo y darle permisos de “Administrador”.
  • Login con el usuario recién creado.
  • Elimina el usuario admin (el viejo). Preguntará si quieres eliminar los posts existentes o enviarlos a otro usuario. Elige la segunda opción y asígnalos al usuario que acabas de crear.

 

#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:

  • Editar el “Alias” / “Nickname” del usuario. Éste será el nombre con el que se mostrará el usuario, ocultando así su username.

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:

  • Elimina todos los plugins innecesarios.
  • Elimina todos los plugins que no utilices.
  • Elimina todos los temas innecesarios
  • Elimina todos los temas que no utilices.

 

#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:

  • Añadir esas 3 lineas al final del archivo functions.php, en el propio tema.

 

#8 – Eliminar la basura de la etiqueta <head>

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:

  • Añade esas 7 lineas al final del archivo functions.php, en el propio tema.

 

#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:

  • Añadir esta linea al final del archivo wp-config.php, en el directorio raíz de WordPress.

 

#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:

  • Añadir esta linea al final del archivo wp-config.php, en el directorio raíz de WordPress.

 

#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="http://www.holafamilias.com/wp-content/uploads/2010/11/hola-11.jpg"/>

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:

  • Copia esta linea al final del archivo functions.php, en el propio tema.
add_filter('pre_comment_content', 'wp_specialchars');

 

#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<&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<q24+7+Q`l1b!,sDW:+K^e8>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:

  • Copiar el código desde el generador de WordPress.
  • Editar wp-config.php en la carpeta raíz de WordPress.
  • Reemplazar esas lineas con los valores obtenidos en el generador de WordPress.

 

#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.