Cómo proteger Wordpress: las 20 reglas de oro

Cómo proteger WordPress: las 15 reglas de oro

José Luis Martínez Wordpress Leave a Comment

Tiempo de Lectura: 15 minutos

Con el paso del tiempo, WordPress se ha convertido en el CMS (sistema de gestión de contenidos) número uno para la publicación en web. Multitud de empresas y particulares lo usan para sus desarrollos en línea, y ya se sabe, cuando algo tiene éxito, los amigos hackers y crackers harán lo imposible para atacarlo, por tanto: es indispensable saber proteger un website con WordPress.

La seguridad de WordPress

Mucho se ha hablado de la relativa seguridad que tiene una instalación de WordPress por defecto. Y es que, para bien o para mal, se deja en manos del usuario final casi toda la responsabilidad de aplicar medidas de seguridad que deberían ser obligatorias. Cierto es que la mayoría de recomendaciones son a nivel de servidor, por tanto, el propio CMS poco puede hacer si el webmaster no las pone en práctica.

Aumentar la seguridad de una instalación de WordPress no es difícil, como verás más adelante, con seguir unas sencillas prácticas, nuestro sitio web será mucho más seguro. Y es que, si has sido desarrollador de este gestor de contenidos, sabrás todo el tiempo que se necesita para dejarlo a tu gusto. Lo último que queremos es perder todo el trabajo por un ataque fácilmente evitable.

Antes de comenzar con acciones concretas como las de las 15 reglas de oro, haremos un breve repaso por los diferentes tipos de ataques que puede recibir nuestro sitio. Así, cuando veamos formas de protección, tendremos más claro su objetivo.

¿Qué tipos de ataques a WordPress son más frecuentes?

1. Ataques de fuerza bruta

Simplemente se trata de probar con miles de combinaciones de usuario/contraseña. ¿Te suena admin/1234?

2. Ataques por phishing

Los típicos correos que intentan pedirte o forzarte a introducir los datos de acceso a tu website.

3. Ataques DOS o DDoS

El objetivo de este ataque es bloquear la web, no entrar al panel de control, por medio de millones de peticiones a tu servidor desde multitud de servidores coordinados.

4. Ataques por bugs en el core, plugins o temas

Ningún código se salva tener fallos de programación o bugs. Los hackers los aprovecharán para intentar conseguir el acceso al panel de control.

5. Ataques por inyección de código SQL

Son sentencias SQL embebidas en texto que los atacantes introducen en formularios de la web. El objetivo es que el servidor ejecute consultas SQL sobre la base de datos con fines dañinos.

6. Ataques por subida de adjuntos

Subir ejecutables que consiguen acceso al shell o línea de comandos del servidor.

7. Ataques por exploit de directorio

El atacante intenta acceder a directorios no protegidos de nuestro servidor para bajar ficheros de configuración.

Como ves, la lista es amplia, y hay muchas variaciones. ¿Seguro que no quieres proteger tu website?

Veamos cómo hacerlo.

Principios de seguridad básicos para un website

La seguridad es un tema prioritario a considerar en cualquier desarrollo web. Tener siempre presentes unos hábitos de protección nos ayudará a evitar problemas:

1. Limitar el acceso

Cuantas menos personas y opciones de acceso existan en tu website, más difícil será atacarlo. Evita crear cuentas de usuario administrador innecesarias. Controla muy bien las que existen y qué personas tienen acceso a las mismas.

2. Aislamiento

Si un atacante logra el acceso a nuestro sistema, al menos que haga el mínimo de daño posible. Evita, en la medida de lo posible, tener varias instalaciones de wordpress en un mismo servidor, o utilizar el mismo usuario para acceder a bases de datos o paneles de control diferentes. Cuando más aislemos las funciones de los usuarios o los servidores, menor daño podrá hacer un atacante.

3. Copias de seguridad o Backups

Cuando no se ha podido evitar el ataque y el daño ya está hecho, la única opción que nos queda será restaurar la copia de seguridad. ¿Está bien configurada? ¿Has realizado una prueba para restaurarla? Hacer copias de seguridad diarias es importante, pero más aún es comprobar que son operativas y que pueden restaurar el website. ¿Dispones de un entorno de backup fiable?

4. Mantener el website actualizado

Es crítico mantener al día la versión de WordPress, plugins y temas. Revisa periódicamente si existen actualizaciones para aplicarlas. Si dispones de un sitio de pruebas o stage, mucho mejor, de esta forma puedes hacer pruebas y ver si funcionan correctamente antes de instalarlas en el sitio principal o de producción. Lo mismo podemos aplicar al servidor físico: última versión de PHP, actualizaciones de seguridad de Apache/Windows Server…

5. Fuentes de confianza para temas y plugins

No instales plugins o temas de fuentes que no sean confiables. Buscar en Google una versión gratuita de un plugin o tema premium es una receta para el desastre. Los hackers y organizaciones maliciosas los distribuyen con malware en su interior.

Las 15 reglas de oro para proteger un website con WordPress

Y por fin, nuestro checklist de seguridad para WordPress. Las 15 reglas de oro que todo webmaster debería seguir. Con estas sencillas recomendaciones, elevaremos la seguridad de nuestra instalación de WordPress en muchos enteros.

La lista está ordenada de forma inteligente, de forma que si vas a comenzar la instalación de tu página web, puedas seguirla punto por punto y evitar tener que comenzar de nuevo la instalación porque has olvidado implementar algún punto:

Regla 1. Filtrar las direcciones IP que pueden acceder a tu website o servidor

Posiblemente es la regla que evitará el mayor número de ataques. Si tu website es un negocio local o nacional, ¿por qué ofrecer la web a todo el mundo mundial? Habla con tu proveedor de hosting o administrador para limitar las IP que pueden acceder a la web mediante geolocalización.

Regla 2. Utilizar SFTP y SSL

¿Todavía estas utilizando una conexión de FTP clásica? No hay forma más sencilla de proporcionar las credenciales de acceso a tu servidor que usar el servicio FTP sin proteger. Evítalo a toda cosa utilizando una aplicación de SFTP como Filezilla o similares.

Ídem con los certificados SSL para tu website. Añadir capas de encriptación nunca está de mal para salvaguardar los datos que viajan por Internet.

Regla 3. Utilizar la última versión disponible de WordPress

En el momento de instalar, consulta wordpress.org y descarga la última versión disponible.

Instalar la última versión evitará muchos bugs y fallos de programación que pueden ser “objetivos conocidos” para ataques.

Descargar la última versión disponible de WordPress

Descargar la última versión disponible de WordPress

Regla 4. Cambiar el prefijo por defecto de las tablas de la base de datos.

En la famosa pantalla de instalación de WordPress, se nos pedirá un prefijo para las tablas de la base de datos. Por defecto aparece wp_, de forma que toda tabla comenzará así: wp_users, wp_options, wp_posts

Si no cambiamos este prefijo, estamos facilitando la labor de los atacantes, pues ya saben cómo se llamarán todas nuestras tablas de la base de datos y la inyección de código SQL será más sencilla.

Te sugerimos que insertes una combinación de letras delante del prefijo por defecto, o lo cambies completamente. Unos ejemplos: abcwp_, x1q2g_

Opciones por defecto de la pantalla de instalación de WordPress

Opciones por defecto de la pantalla de instalación de WordPress

Regla 5. Utilizar nombres de usuario y contraseñas seguros.

Siguiendo con la pantalla de instalación por defecto, verás que nos pide un nombre de usuario y una contraseña para la base de datos. Después, una vez instalado WordPress, también nos pedirá un usuario y contraseña para el usuario administrador, que será con el que accederemos por primera vez al panel de control. En ambos casos:

  • Evita utilizar los típicos nombres de usuario: admin, root… Parece una tontería, pero ante ataques de fuerza bruta, serán los primeros en caer, pues los hackers disponen de amplios diccionarios de usuario/contraseña frecuentes.
  • Utiliza una contraseña segura, con números, letras y caracteres especiales. Guárdala en un sitio seguro, a ser posible de forma local. Evita almacenarla en el mismo servidor donde está alojada la web.
Usuario y contraseña de la pantalla de instalación de WordPress

Usuario y contraseña de la pantalla de instalación de WordPress

Regla 6. Impedir el listado de directorios desde un navegador

Normalmente, por defecto, en un servidor se permite listar todos los archivos de un directorio desde un navegador. Con esto facilitamos la labor del atacante, que puede conocer rutas y nombres de archivos.

Por ejemplo, prueba a acceder a esta ruta una vez hayas instalado WordPress:

www.tudominio.com/wp-includes/

Si tienes activado el listado de directorios, verás algo así:

Listado de directorios activo en un servidor con WordPress

Listado de directorios activo en un servidor con WordPress

Para desactivar esta función, editaremos el archivo .htaccess que se crea en el directorio raíz de toda instalación de WordPress.

Agregaremos esta línea con cuidado de no tocar otras:

Options -Indexes

Ahora, si intentamos acceder a un directorio, aparecerá la página de Error 404.

Regla 7. Configurar las claves secretas del archivo wp-config.php

El archivo wp-config.php es uno de los más importantes de una instalación de WordPress. En él se configura, por ejemplo, el nombre de la base de datos, el usuario, la contraseña, el prefijo de las tablas y muchas cosas más. Entre ellas, hay una sección donde se definen las claves de seguridad (Security Keys) de tu instalación. Estas claves hacen que el website sea más difícil de atacar al encriptar las contraseñas de los usuarios.

Revisa que estas líneas están definidas en tu archivo wp-config.php y presentan valores aleatorios:

define( 'AUTH_KEY', 'aquí va una clave' );
define( 'SECURE_AUTH_KEY', 'aquí va una clave' );
define( 'LOGGED_IN_KEY', 'aquí va una clave' );
define( 'NONCE_KEY', 'aquí va una clave' );
define( 'AUTH_SALT', 'aquí va una clave' );
define( 'SECURE_AUTH_SALT', 'aquí va una clave' );
define( 'LOGGED_IN_SALT', 'aquí va una clave' );
define( 'NONCE_SALT', 'aquí va una clave' );

Si no están configuradas, puedes usar este link para generarlas:

http://api.wordpress.org/secret-key/1.1/salt

Regla 8. Revisar los permisos de archivos y carpetas

Toda instalación de WordPress utiliza una estructura conocida de archivos y carpetas. Es muy importante que los permisos de los mismos sean los correctos:

  • Directorios: 755
  • Archivos: 644 (excepto wp-config.php que puede tener 666 y veremos en la siguiente regla cómo protegerlo)

Evita a toda costa tener algún archivo o directorio con el permiso total 777.

Regla 9. Proteger el archivo wp-config.php

Ya hemos hablado de la importancia de este archivo. Con agregar estas líneas al archivo .htaccess (lo más arriba posible) evitaremos la modificación no autorizada de este fichero:

<files wp-config.php>
order allow,deny
deny from all
</files>

Regla 10. Proteger el directorio wp-includes

Añadiendo estas líneas al archivo .htaccess agregaremos una segunda capa de protección, bloqueando scripts que no están destinados a ser usados por ningún usuario:

# Block the include-only files.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

Ojo: si tu sitio es Multisite, elimina de este código la línea: RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]

Regla 11. Proteger el directorio wp-content/uploads

El directorio de uploads (subidas) es casi el único directorio donde el servidor web tendrá que escribir. Es el destino de todos los archivos que se cargan de forma remota. Si deseas evitar la ejecución de PHP en este directorio, puedes hacerlo colocando un .htaccess en la raíz del mismo con el siguiente contenido:

# Kill PHP Execution
<Files ~ "\.ph(?:p[345]?|t|tml)$">
 deny from all
</Files>

Ojo: esto puede romper tu tema personalizado si requiere la ejecución de PHP en el directorio uploads. Si lo aplicas y el sitio se rompe, elimínalo y el sitio volverá a aparecer.

Regla 12. Desactivar el editor de archivos del panel de control

Mediante el Editor del menú Apariencia, el usuario administrador puede modificar cualquier archivo que sea parte de la instalación de WordPress. Esto incluye todos los plugins y temas.

Si un hacker obtiene acceso de administrador al panel de control de WordPress, podrá modificar cualquier archivo. Para desactivar este editor, agrega estas líneas al archivo wp-config.php (al final):

## Disable Editing in Dashboard
define('DISALLOW_FILE_EDIT', true);

Regla 13. Instalar un plugin de autenticación en 2 pasos

Configurar un plugin de autenticación en 2 factores es un buen plus de seguridad que hará muy difícil para un atacante conseguir el acceso al panel de administración.

Los propios creadores de WordPress recomiendan los siguientes:

Regla 14. Crear una cuenta de Google Search Console

Como buen webmaster seguro que has creado una cuenta de Google Search Console para tu website. Si no lo has hecho, ya estás tardando, pues además de darte una gran información sobre el indexado de tu página web y el comportamiento de la búsqueda en Google, también realizará análisis de seguridad y detectará si tu WordPress ha sido pirateado.

Regla 15. No accedas al panel de control desde un equipo inseguro

Todas estas reglas no servirán de nada si eres “promiscuo” accediendo al panel de control de tu website desde un ordenador que no es el habitual, como por ejemplo un equipo conectado a una WIFI pública.

El equipo desde el que editas tu website debe ofrecer las máximas garantías de seguridad, con un buen antivirus y un firewall actualizados. Ante la mínima duda de infección, no entres a tu WordPress.

Escrito por

José Luis Martínez

LinkedIN