miércoles, 12 de marzo de 2014

Cómo incrementar la seguridad de una web creada con WordPress

Cómo incrementar la seguridad de una web creada con WordPress

Cómo incrementar la seguridad de una web creada con WordPress

Dado el gran éxito de WordPress son cada vez más altas las preocupaciones de sus usuarios por estar al día de todos los consejos relativos a la seguridad de su web. No es raro encontrar usuarios a los que les han hackeado su web, les han instalado un virus que borra toda la base de datos, tienen cuentas de administradores fantasmas o de repente generan miles de comentarios con enlaces a material adulto o de venta de viagra. Al ser tan popular WordPress los ataques se disparan. Puedes pensar que esto no te va a pasar a tí, pero si no tomas las medidas necesarias de precaución aumentarás la probabilidad de que te ocurra.
Para evitar estos problemas o, al menos, para ponérselo lo más difícil posible a cualquier hacker o a cualquier robot que ande por la red buscando instalaciones de WordPress desprevenidas lo mejor es seguir unas recetas básicas de seguridad antes, durante y después de la instalación de WordPress.

Antes de la instalación

a) Muchas empresas de alojamiento ofrecen la posibilidad de instalar WordPress de manera automática mediante Fantástico. Aunque es una opción realmente cómoda, tiene un inconveniente: No nos permite configurar a nuestro gusto la instalación de WordPress, especialmente en cuanto al prefijo de las tablas en la base de datos, ya que se utilizará wp_, que es el que utiliza el programa de instalación por defecto. Si podéis, haced una instalación manual. Si preferís usar Fantástico recordad cambiar más adelante el prefijo de las tablas de la base de datos (veréis más adelante cómo hacerlo)
b) Antes de instalar WordPress hemos de decidir dónde instalarlo. Lo podemos instalar en el directorio raíz de tu web, que sería lo normal. Pero también podemos instalarlo en una carpeta a la que le podemos dar un nombre cualquiera, por ejemplo “comentarios” u otro que se nos ocurra (algunos autores recomiendan utilizar nombres absurdos y difíciles de imaginar). Si hemos elegido “comentarios”, y para que nuestra web no aparezca como en http://www.miweb.es/comentarios/, necesitaremos mover los archivos index.php y .htaccess desde dentro de la carpeta “comentarios” al directorio raíz. Después habría que cambiar dentro de index.php estas líneas:
a estas:
Una vez hayas instalado WordPress entra en tu panel de administración (www.miweb.es/comentarios/wp-admin) y ve a Opciones/General y asegúrate de que la Dirección de WordPress (URL) sea http://www.miweb.es/comentarios/ (o cualquiera que sea en tu caso) y que la Dirección del Blog (URL) sea http://www.miweb.es/
De esta manera se adquiere un plus extra de seguridad frente a bots escaneando la red buscando archivos de WordPress. Además, como ventaja, se obtiene un directorio raíz más limpio.

Durante la instalación

Durante la instalación hay varios procedimientos que fortalecerán tu instalación de WordPress:
a) En primer lugar es recomendable cambiar el prefijo de de las tablas de la base de datos antes de que esta se genere. Este prefijo se cambia en el archivo wp-config.php. Por defecto aparece “wp_”. Cámbialo por cualquier otro prefijo. Por ejemplo:
Si ya hemos instalado WordPress y queremos cambiar el prefijo a posteriori, hay plugins que lo hacen por nosotros: WP Prefix Table Changer, WordPress Table Prefix Rename Plugin o Wp-Security Scan (del que hablaremos también más adelante).
b) Igualmente, en wp-config.php puedes definir cuatro claves de seguridad que te ayudan a incrementar la seguridad de WordPress. Estas claves se pueden crear manualmente o a través de WordPress.org. Estas cuatro claves se asignan a diferentes cookies y se utilizan en diversos lugares para incrementar la seguridad de WordPress. Estas claves son:
* AUTH_KEY
* SECURE_AUTH_KEY T
* LOGGED_IN_KEY
* NONCE_KEY
Símplemente copia los valores que hayas obtenido de manera automática en el enlace anterior de WordPress.org en cada línea correspondiente de tu wp-config.php, por ejemplo:

Una vez instalado WordPress

a) Crear un archivo vacío index.html en aquellos directorios que no lo tengan, lo que permite que no se pueda listar el contenido del directorio. Como alternativa más sencilla podemos añadir esta línea en nuestro archivo .htaccess: Options -Indexes
b) Utilizar acceso seguro. Si en tu solución de hosting tienes posibilidad de utilizar acceso vía SSL (Secure Socket Layer), aunque sea compartido, utilízalo. Para ello tendrás que activarlo en el archivo wp-config.php:
c) Cambiar el nombre del usuario. El usuario por defecto de la nueva instalación será “admin”. Dejar este usuario es dar facilidades a cualquiera malintencionado. Hay dos opciones: o crear un nuevo usuario y borrar el usuario “admin” tal y como explico en un artículo anterior (Primeros pasos tras una nueva instalación de WordPress) o crear un nuevo usuario con funciones de administrador y al usuario admin cambiarle el rol a Suscriptor, para que no pueda hacer nada.
d) Mover el archivo wp-config.php: También explicado en mi artículo anterior. Este archivo es vital para proteger la seguridad de tu web. En él están datos vitales como los que permiten el acceso a tu base de datos. WordPress permite mover este archivo a UNA carpeta superior dentro del alojamiento de la web. De esta manera podemos sacar este archivo fuera del acceso público sin ningún problema. Por ejemplo, si tenemos una estructura con varias carpetas en la que una es public_html, que es donde está la web, podemos sacar el archivo a la carpeta superior no accesible por el público general:
wordpress_config1
e) Suprimir el mensaje de error en la entrada al administrador: Cuando vamos a acceder al administrador de WordPress y nos equivocamos por ejemplo en la contraseña saldrá un mensaje que nos dirá que lo que está mal es la contraseña. Si no queremos dejar pistas podemos incluir esta línea en el archivo functions.php de nuestro tema:
f) Utilizar una contraseña segura, que sea difícil de adivinar. Utiliza una contraseña larga, con mezcla de mayúsculas, minúsculas, números… Que sea una contraseña única que no hayas utilizado para ninguna otra cosa. Además es una buena idea cambiar de contraseña cada cierto tiempo.
g) Haz copias de seguridad de tu Base de Datos tan frecuentemente como sea necesario. Para hacer copias de seguridad manualmente vía phpMyadmin puedes seguir esta guía paso a paso de WordPress.org. Hay también plugins que hacen la copia de seguridad por ti e incluso te la envían por email si así lo quieres, como WP-DBManager o WP-DB-Backup
h) Asegúrate de que el ordenador desde el que entras a tu panel de administración está libre de virus, spyware y cualquier programa malicioso. Es importante que tengas en tu ordenador un buen antivirus puesto al día.
i) Mantén tu versión de WordPress siempre actualizada a la última versión disponible. Hay ocasiones en la que incluso se crean nuevas versiones para hacer frente a agujeros de seguridad que se han descubierto en ese momento. Igualmente es importante mantener actualizados todos tus plugins.
j) Instala Plugins de Seguridad. Entre ellos destacan:
- WP Security Scan, que comprueba tu instalación de WordPress, busca áreas vulnerables y te propone acciones para corregirlas.
- WordPress Exploit Scanner, que busca entre los ficheros de la web y entre las entradas y comentarios en las tablas de la base de datos cualquier cosa sospechosa.También busca entre los plugins activos ficheros con nombres sospechosos. No borra nada, símplemente te informa de los resultados de sus análisis.
- Limit Login Attempts, que limita el número de intentos posibles para entrar en el área de administración. Por defecto WordPress permite un número ilimitado de intentos, lo cual es una facilidad añadida a cualquiera que quiera entrar mediante prueba-error.
- AntiVirus for WordPress, que se centra en la detección de software malintencionado que pueda atacar nuestra instalación de WordPress. Incluso te puede enviar notificaciones por email
- Askimet, que viene instalado con WordPress y sólo hay que activarlo, y que elimina todo el spam de los comentarios.

k) Seguridad vía .htaccess. Hay muchas opciones (ver Hardening WordPress with htaccess). Por ejemplo:
Si no podemos llevarnos el archivo wp-config.php como indicamos más arriba podemos protegerlo añadiendo en el archivo .htaccess que está en el directorio raiz lo siguiente para negar todos los accesos al archivo:
Si queremos negar todos los accesos excepto los de una IP en particular al archivo wp-config-php:

Si tu IP es dinámica (como suele ser normalmente) y varía entre dos números (por ejemplo, entre 123.456.789.1 y 123.456.789.255) puedes poner:
También podemos proteger el directorio wp-admin. La manera más sencilla de hacerlo es a través del archivo .htaccess situado dentro de dicho directorio (si no existiera puedes crearlo). Haríamos igual que antes:
Debes tener cuidado al proteger el directorio wp-admin, ya que puede bloquear el acceso a algunos plugins o a algunas funcionalidades de WordPress. Para evitar jaleos puedes instalar un plugin que haga esto por tí, como AskApache Password Protection o WP-Adminprotection
Además, podemos proteger toda una serie de archivos sensibles (.htaccess, .htpasswd, php.ini, scripts php, archivos flash .fla, archivos de photoshop .psd o archivos log) de igual manera:
l) Hay autores que aconsejan borrar el archivo wp-admin/install.php tras realizar la instalación de WordPress ya que en alguna rara ocasión puede suceder que tras un error WordPress piense que aún no está instalado y trate de ejecutar el archivo install.php
Otra oción es sustituir el contenido del archivo por esto, mucho más útil, tal y como proponen en Important Security Fix for WordPress (lo he dejado en inglés, como en el original):

m) Dejar de mostrar la versión de WordPress que tenemos instalada. Muchos temas de WordPress la muestran, lo cual no deja de dar pistas a usuarios malintencionados. Para ello añadiríamos la siguiente línea al archivo functions.php de nuestro tema:
n) Evitar que otras webs utilicen imágenes u otro contenido de tu web (lo que se suele llamar hotlinks). Me ha ocurrido en ocasiones que otras webs han utilizado imágenes, iconos, etc.. de webs mías simplemente enlazándolas con lo cual utilizan ancho de banda mío. Para evitarlo lo podemos hacer vía el archivo .htaccess:
Podemos encontrar más consejos sobre este particular en Creating the Ultimate htaccess Anti-Hotlinking Strategy.
o) En septiembre del 2009 hubo un ataque generalizado a muchas instalaciones de WordPress, que fueron infectadas con código malicioso. Recientemente Jeff Starr de Perishable Press ha propuesto una solución que protege igualmente de ataques futuros. Simplemente hay que crear un fichero php con este código y guardarlo en la carpeta plugins. Al activarlo desde el panel de administración nos protegerá silenciosamente detectando solicitudes con cadenas demasiado grandes (más de 255 caracteres) así como la presencia de “eval(” o “base64” en el URI solicitado.
Hay muchas más opciones recomendables, aunque con las anteriores se conseguiría un nivel de protección muy alto. Es conveniente estar suscrito a blogs de WordPress donde estar al día de las novedades que vayan surgiendo sobre el particular, como por ejemplo el blog en Español Ayuda WordPress.

Sigue a Juan en Twitter, en Google+, o suscríbete al RSS Feed de Emenia para estar al día de nuestros artículos.