Si quieres construir un sitio web flexible hoy en día, es muy probable que utilices un sistema de gestión de contenido (CMS). Y WordPress es, con mucha diferencia, el más popular.

En el último recuento, WordPress se usaba aproximadamente en el 40% de todos los sitios web en Internet. Eso significa que si eres un programador web, es probable que te encuentres con WordPress en algún momento de tu carrera profesional.

Ya que WordPress se usa tanto, cualquier programador que trabaje con él debe tener mucho cuidado de protegerlo contra ataques externos. Y esos ataques continúan multiplicándose. En un solo incidente el año pasado, casi un millón de sitios web fueron atacados en un solo mes.

El problema es que no hay dos sitios de WordPress creados de la misma forma, lo que significa que hay un número infinito de vulnerabilidades potenciales a las que hay que prestar atención. Y cuando añades plugins de terceras partes a la mezcla, se hace imposible montar una defensa de sitio web perfecta.

Pero hay algunas cosas que puedes hacer para fortalecer un sitio de WordPress contra ataques.  Detendrán todas las amenazas excepto las más sofisticadas. Aquí van seis pasos de seguridad que debes seguir en cada sitio de WordPress con el que trabajes.

Paso Uno: Actualizar WordPress a la última versión

Dado que WordPress es una pieza de software, es fundamental mantenerlo actualizado para corregir las vulnerabilidades a medida que se identifican. Pero un número sorprendentemente alto de desarrolladores y propietarios de sitios web se niegan a hacerlo.

Los datos recientes indican que hasta el 70% de las instalaciones conocidas de WordPress todavía usan versiones con vulnerabilidades conocidas.

Aunque puede que creas que esta información haría sonar las alarmas en internet, el problema persiste. Parte de ello se debe a que las empresas no están dispuestas a pagar a profesionales para completar el trabajo. Y parte se debe a que ciertos sitios dependen de plugins heredados que no funcionarán con las versiones más recientes de WordPress.

Pero cualquier desarrollador que trabaje en un sitio web de este tipo está buscando problemas. Por lo tanto, sería mejor que insistieras en una actualización del sitio web cada vez que encuentres una instalación no actualizada de WordPress.

Si te tomas el tiempo de compartir algunas de las estadísticas de amenazas con el propietario del sitio web, en algún momento verá la luz. Asegúrate de hacer una copia de seguridad completa del sitio web  antes de realizar cualquier cambio.

Si algo sale mal y las páginas se rompen o los plugins fallan, crearás un problema mayor del que resuelves. Según WSI Digital Web, este es un problema que se encuentran muchos desarrolladores y causa daños en el mundo real. Ellos han dicho,

"Hemos tenido que hacer correcciones después de que actualizaciones fallidas de WordPress deshabilitaran páginas, debido a la rotura del sitio web. Cuando eso sucede, esas páginas pueden salirse de los índices de búsqueda muy pronto, por lo que es esencial revertir los cambios rápidamente".

Paso dos:  Eliminar plugins no utilizados y actualizar el resto

Igual que una instalación básica de WordPress, los plugins también sufren vulnerabilidades de vez en cuando, que los desarrolladores corrigen . Y WordPress depende mucho de plugins para proporcionar todo tipo de funcionalidades.

Por ejemplo, cuando recientemente trabajé en el sitio web de una empresa de fontanería local, me sorprendió ver los plugins que usaban, dada la relativa simplicidad del sitio.

Pero la mejor manera de minimizar la superficie de ataque posible es, primero,  eliminar cualquier plugin redundante o en desuso, y luego, buscar las actualizaciones disponibles. Eso simplificará las tareas de mantenimiento en curso y reducirá el potencial de vulnerabilidades.

Solamente una vez hecho esto, deberías verificar el estado de actualización de los plugins restantes.

Después de aplicar las actualizaciones disponibles, no supongas que todo está bien. Verifica si alguno de los plugins restantes no ha tenido actualizaciones en un tiempo e intenta averiguar por qué.

Si descubres que un desarrollador de plugins ha desaparecido o discontinuado un plugin, busca un reemplazo actual. Cuanto más tiempo pase un plugin sin ninguna actividad de desarrollo, mayores serán las probabilidades de que se convierta en un problema de seguridad.

Paso tres: Minimizar los permisos de usuario y los inicios de sesión de seguridad

Que el sitio de WordPress en el que estás trabajando no contenga vulnerabilidades conocidas, no significa que sea seguro. Esto se debe a que los ataques de fuerza bruta a las credenciales son la forma más común en que los piratas informáticos obtienen acceso no autorizado a los sitios web de WordPress. Y la mejor manera de evitar daños es revisar los permisos de usuario y las políticas de contraseñas.

Primero, intenta reducir el número de cuentas que tienen acceso de nivel de administrador.  No es raro que las pequeñas empresas designen a casi todos como administradores, pero ese es un riesgo enorme.

Por tanto, revisa cada cuenta y asigna el nivel de permiso más bajo posible de los grupos de acceso integrados:

  • Administradores Super – Los Superusuarios de WordPress. Intenta limitarlos a un máximo de dos.
  • Administradores – Este es el permiso de usuario general más alto. Nuevamente, trata de mantenerlos al mínimo.
  • Editor – Para usuarios que necesitan controlar y realizar cambios en todos los artículos publicados.
  • Autor – Un usuario que solamente puede publicar y cambiar cosas bajo su nombre.
  • ContribuidorPuede agregar, pero no publicar artículos bajo su nombre.
  • SuscriptorNo pueden realizar cambios en el sitio web, excepto en su perfil de usuario.

Si encuentras usuarios que ya no necesitan acceso, elimínalos. Y luego, usa el complemento Google Authenticator u otro sistema de autentificación de dos factores para proteger las cuentas restantes.

Paso cuatro: Deshabilitar la ejecución de PHP en carpetas que no son de confianza

Hasta ahora, todos los pasos han girado en torno a la prevención de ataques comunes de bajo nivel.

Pero hay algunas amenazas más sofisticadas para los sitios de WordPress de las que también deberías preocuparte. Y muchas de ellas involucran a atacantes que encuentran formas de ejecutar código en un sitio sin obtener acceso a la cuenta en absoluto.

Esto es común en WordPress debido a la forma en la que administra los permisos de carpeta predeterminados.

Por ejemplo, si instalas un plugin para administrar los medios cargados por el usuario, como imágenes y videos, necesitarás una carpeta de carga que se pueda acceder desde el exterior. Si un atacante puede obtener acceso a esa carpeta, puede intentar cargar un script malicioso y usarlo para alterar o apoderarse de todo el sitio web.

La buena noticia es que puedes protegerte contra eso con un simple archivo de control de acceso en las carpetas necesarias.

Lo que tendrás que hacer es crear un nuevo archivo en cada carpeta de escritura llamado .htaccess. Es un archivo de texto que le dice al servidor web qué permitir o no permitir en un directorio determinado. En él, incluye lo siguiente:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase
RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] </IfModule>
# END WordPress
<FilesMatch "\.(php|php\.)$">
Order Allow,Deny
Deny from all
</FilesMatch>

Este archivo .htaccess permitirá a los usuarios cargar los tipos de archivos que desee, pero evitará que alguien cargue un código ejecutable en el directorio de escritura.

Puedes hacer esto en cualquier carpeta de usuario que desees proteger. Pero ten cuidado de no abusar de estas restricciones. La mayor parte de WordPress implica la ejecución de PHP, y puedes deshabilitar todo tu sitio web si colocas uno de estos  archivos en el lugar equivocado.

Paso cinco: Deshabilitar la visualización de errores de PHP

Obtener acceso de escritura y ejecución a directorios es solo una de las formas en que un atacante puede intentar ejecutar código malicioso en un sitio web de WordPress. También pueden buscar partes del sitio que ejecuten PHP (que está prácticamente en todas partes donde no lo has bloqueado) y encontrar puntos débiles allí. Pero puedes hacer su trabajo mucho más difícil.

Para hacer eso, debes desactivar la visualización de errores de PHP para que no puedan ver ningún resultado cuando intenten romper las páginas del sitio a propósito. Si el sitio les da pistas sobre qué funciona y qué no, podría proporcionar una hoja de ruta para encontrar una manera de explotar las páginas del sitio existentes.

La buena noticia es que es sencillo desactivar los informes de errores de PHP en WordPress. Todo lo que tienes que hacer es editar el archivo wp-config.php del sitio web, que se encuentra en el directorio raíz, y contiene la información de configuración básica del sitio.

Simplemente agrega la siguiente línea al archivo:

define( 'WP_DEBUG', false);

Esto deshabilitará la depuración de PHP en todo el sitio web. Toma nota cuando realices este cambio en caso de que el sitio web tenga problemas en el futuro y requiera esfuerzos de depuración autorizados.

Paso seis – Deshabilitar la edición de temas y plugins

Incluso después de haber hecho todo lo anterior, no puedes estar seguro de que nadie llegará a un sitio de WordPress con la intención de dañar. Por lo tanto, debes poner en el camino un conjunto final de obstáculos.

Esto no evitará que algún atacante serio cause estragos, pero podría darles a los operadores del sitio web tiempo suficiente para darse cuenta de que algo anda mal y tomar medidas para corregirlo.

Lo que debes hacer es deshabilitar el tema de WordPress incorporado y la capacidad de edición de plugins para dificultar que alguien que haya obtenido acceso a la interfaz administrativa altere la codificación base del sitio.

Una vez más, puedes hacer esto modificando el archivo wp-config.php del sitio web, ubicado en su directorio raíz. Agrega la siguiente línea justo antes de donde veas las palabras 'That's all, stop editing! Happy publishing':

define( 'DISALLOW_FILE_EDIT', true );

Esto ocultará los editores de temas y plugins de la interfaz administrativa y evitará cualquier medio fácil de alterar los archivos del sitio web. Para deshacer este cambio, el atacante necesitaría acceso FTP o de nivel de archivo al servidor web, lo que al menos lo ralentizará un poco.

Y como nota final, aunque en otros lugares puedes ver consejos que te indiquen que uses un plugin de fragmento de código para realizar estos cambios, no lo hagas. Si lo haces, un atacante podría usar ese mismo plugin para deshacer tus cambios, anulando el valor de seguridad de realizar los cambios en primer lugar.

Las protecciones imperfectas también vale la pena probarlas

La conclusión es que WordPress siempre será una especie de víctima de su propio éxito. Hay muchos sitios web que confían en él, lo que lo convierte en un objetivo grande y atractivo para los atacantes.

Y aunque estas seis medidas no detendrán todos los tipos de amenazas posibles, harán un trabajo decente defendiéndose contra la mayoría de los ataques de menor nivel.

También puedes (y debes) intentar proteger las bases de datos de tu sitio web cambiando el prefijo predeterminado de las tablas a algo confuso. Pero como eso está un poco fuera del alcance de un sitio web existente, lo he omitido aquí como medida de seguridad.

Si quieres intentarlo, aquí encontrarás un excelente tutorial. De lo contrario, estate satisfecho de haber hecho tu parte para ayudar a mantener un poco más seguro uno de los innumerables sitios de WordPress en funcionamiento en todo el mundo.

Traducción del artículo de Andrej Kovacevic - How to Secure an Existing WordPress Site in Six Easy Steps