Securizar WordPress en 6 pasos y hacerlo un 99% más seguro

por | Mar 23, 2021 | Destacados, Programación

Como es sabido, hoy por hoy WordPress es el CMS más popular. WordPress ha crecido hasta llegar a ser implementado en el 50% de los sitios web en internet. Si te dedicas al mundo de la programación, es muy probable, que en algún momento te encuentres con algún sitio implementado en WordPress, si es que aún no te ha sucedido, y securizar WordPress es de vital importancia.

Es por eso, que al ser usado de una forma tan amplia, cualquier programador que trabaje con este CMS debe tener mucho cuidado y protegerlo de los ataques externos, ataques que día a día siguen multiplicándose, sin ir mas lejos, el año pasado, fueron atacados más de un millón de sitios web implementados en WordPress en tan solo un mes, los que nos lleva a tener unas cifras anuales muy altas.

Probablemente no hay muchos sitios en WordPress creados de la misma forma, lo que nos lleva a pensar que hay un número infinito de vulnerabilidades potencialmente activas en cada momento, por este motivo hay que prestar mucha atención a la seguridad. Todo esto se complica con la instalación de plugin y más plugin, implementar complementos de terceros sin ningún control, llega a ser prácticamente imposible disponer de una defensa lo suficientemente robusta si no se presta la atención necesaria.

Para ello, hay algunas cositas que podemos hacer para fortalecer nuestro sitio WordPress contra ataques y amenazas menos sofisticados. A continuación te relatamos algunos pasos que te ayudarán en esta tarea y que deberías aplicar en todos los proyectos WordPress en los que trabajas.

Paso uno: actualiza WordPress a la última versión para securizar WordPress

WordPress, como cualquier software, necesita y es fundamental mantenerlo actualizado para ir arreglando vulnerabilidades que van siendo identificadas y parcheadas. Aunque no todo el mundo está de acuerdo, un número demasiado alto de propietarios y desarrolladores se niegan ha hacerlo.
Los últimos datos arrojados, indican que hasta un 60% de instalaciones de WordPress siguen usando versiones con vulnerabilidades conocidas.

Tal como lo vemos nosotros, se debería de poner solución al problema, pero el problema persiste por varios factores: Las empresas se siguen negando a pagar por ayuda profesional para realizar este trabajo.

Otra de las razones y que tiene que ver mucho con la primera, es que miles de sitios dependen de complementos heredados que no funcionan con versiones actualizadas de WordPress.
Cualquier desarrollador que se ponga a trabajar en un sitio de este tipo, encontrará problemas sí o sí, es por ello por lo que cada versión o complemento de WordPress debería ser actualizado cada vez que sale una nueva actualización, ya sea el propio núcleo de WordPress, theme o plugin, lo que lo hará mucho más seguro, con solo esta conducta, y la última versión ayuda mucho a que esto sea posible, ya que cuenta con actualizador automático del propio WordPress y sus complementos.

Para ello es vital disponer de un buen hosting en todos los aspectos, además de la creación de copias de seguridad diarias y muy importante, tener activo como theme un ChildTheme o Tema hijo para evitar que los cambios implementados sean machacados con las actualizaciones.

Paso dos: elimina los complementos no utilizados y actualiza el resto

De la misma forma que el nucleo de WordPress es actualizado, los temas y plugin también necesitan ser actualizados, ya que estos tampoco están libres de vulnerabilidades, que sus desarrolladores van parcheando periódicamente, dado que WordPress depende de estos componentes que proporcionan diferentes tipos de funcionalidades.

Cuando se trabaja en algún proyecto existente, a menudo, te das cuenta de el gran número de plugin que hay implementados en muchos sitios, siendo muchos de ellos inútiles o que han caído en desuso, entre otras cosas porque muchos de estos proyectos son proyectos simples que no requieren de funciones de terceros. Todo esto, nos lleva a la inevitable búsqueda de cualquier componente que sea redundante o que no se use, antes de buscar actualizaciones que no tendrían ningún sentido, esto simplificará las tareas de mantenimiento que se estén llevando a cabo, reduciendo en un gran porcentaje las vulnerabilidades del sitio web en cuestión.

Una vez realizado esto, actualizaremos el resto de plugin de nuestro sitio web. Después de llevar a cabo todo este trabajo, a veces complicado por la antigüedad de los componentes, no demos por hecho que todo está bien. Verifica, si queda algún componente sin actualizar y los motivos de ser actualizados.

Si descubrimos un plugin el cual, ha sido desconectado o que el desarrollador ha desaparecido, debemos buscar otro plugin que realice las mismas funciones y que sea mantenido de forma activa, cuanto más tiempo pase sin actualizarse un complemento, más posibilidades habrá de que se convierta en un problema de seguridad.

Paso tres: minimiza los permisos de usuario y los inicios de sesión seguros

Incluso si creemos que disponemos de un sitio web que no contiene vulnerabilidades conocidas en el que estamos trabajando, eso no significa que sea seguro, es recomendable no subestimar 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.

La mejor manera de evitar daños, es revisar los permisos de usuario y las políticas de contraseñas.
Primero, limita al máximo el número de cuentas con acceso como administrador, es algo muy común que las pequeñas empresas asignen privilegios de administrador a todos los empleados, eso entraña un riesgo enorme, por eso, es conveniente revisar y asignar el nivel de permisos más bajo posible a cada empleado de los grupos integrados:

  • Superadministradores: Superusuarios de WordPress. Intenta limitarlos a un máximo de dos.
  • Administradores: Este es el permiso de usuario general más alto. Recomendamos mantenerlos al mínimo.
  • Editor: Para usuarios que necesitan controlar y realizar cambios en todos los artículos publicados.
  • Autor: Un usuario que solo puede publicar y cambiar cosas en su nombre.
  • Colaborador: Puedes agregar, pero no publicar artículos en tu nombre.
  • Suscriptor: No se pueden realizar cambios en el sitio, excepto en su perfil de usuario.

Aconsejamos eliminar a los usuarios que ya no tengan relación con el proyecto o que ya no vayan ha hacer uso de dicho usuario. También aconsejamos usar algún sistema de autenticación de dos factores para proteger las cuentas restantes.

Paso cuatro: deshabilita la ejecución de PHP en carpetas que no sean de confianza

Hasta este momento nos hemos centrado en los ataques comunes de bajo nivel. Pero, hay amenazas mucho más sofisticadas, la mayoría de estos atacantes encuentran formas de ejecutar código malicioso sin tener acceso a ninguna cuenta, esto es algo muy común, ya que tiene que ver como WordPress administra los permisos de carpeta predeterminados.

Hay ejemplos muy claros sobre esta cuestión, si instalamos un plugin que administra medios que serán cargados por usuarios, como imágenes, vídeos, etc…, necesitarán una carpeta que se pueda escribir de forma pública, dicho lo cual, si un atacante puede obtener acceso a esa carpeta, es muy probable que intente subir un script malicioso y usarlo para tomar el control del sitio web completo.
Aunque como para casi todos los problemas, siempre hay una solución, protegiendo el control de acceso en las carpetas necesarias, solo habrá que copiar y pegar este código en un archivo .htaccess en la raiz de nuestro sitio web, esto le dirá al servidor web qué permitir o no permitir en un directorio determinado.

# 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 ninguno de ellos ejecute ningún código ejecutable en una carpeta con permisos de escritura.
Puedes hacer esto en cualquier carpeta de usuario que desees proteger. Hay que tener mucho cuidado también a la hora de aplicar este tipo de restricciones, ya que la mayor parte de la estructura de WordPress implica la ejecución de PHP, y sin el conocimiento adecuado, puedes deshabilitar todo tu sitio si colocas un cambio de estos mencionados en el lugar equivocado.

Paso cinco: deshabilita la visualización de errores de PHP también llamado depurador

Obtener acceso de escritura y ejecución a carpetas 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 bloqueaste) y encontrar puntos débiles allí. Pero puedes hacer su trabajo mucho más difícil.

Para ello, se debe 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, también llamado depurador. Si nuestro sitio le da pistas sobre qué funciona y qué no, podríamos estar proporcionando 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 de tu sitio, este archivo está ubicado en la raíz de nuestro proyecto, este archivo contiene información de configuración básica de sitio web.

¿Cómo lo vamos ha realizar?
Simplemente agregando la siguiente línea al archivo:

define( 'WP_DEBUG', false);

Esto deshabilitará la depuración de PHP en todo el sitio. Ten en cuenta, que a futuro, es posible que tengas que cambiar el valor a true para depurar cualquier error que se esté produciendo en alguna de nuestras futuras implementaciones.

Paso seis: deshabilita la edición de temas y complementos

Incluso después de haber hecho todo lo anterior, no podemos estar seguro de que nadie llegue a nuestro sitio web con la intención de dañarlo. Por lo tanto, vamos a aconsejar un último cambio en nuestro archivo wp-config.php.

Esto no evitará que ningún atacante serio cause estragos, pero contribuiremos a que no les resulte tan fácil el poder hacerlo, además nos brindará una capa de seguridad extra, ya que dotaremos al sitio web de la imposibilidad de poder editar cualquier archivo desde el área administrativa.

Una vez más, para llevarlo a cabo, abrimos el archivo wp-config.php del sitio ubicado como comentábamos anteriormente en la raíz del sitio web. Agrega la siguiente línea justo después de la configuración de los parámetros de conexión a la base de datos.

define( 'DISALLOW_FILE_EDIT', true );

Esto ocultará los editores de temas y plugin de la interfaz administrativa, evitando llevar a cabo cualquier modificación o alteración de los archivos de nuestro sitio. 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 mas si cabe.

Y como nota final, nunca uses un plugin de fragmento de código para llevar a cabo este tipo de implementaciones de seguridad, ya que si lo haces, un atacante podría usar ese mismo plugin para deshacer nuestros cambios, anulando el valor de seguridad que llevamos a cabo con dicha implementación.

No son protecciones perfectas, pero pueden ayudarnos enormemente

La conclusión a la que podemos llegar, es que con estos pequeños tips, podemos mejorar enormemente la seguridad de nuestro WordPress.

Y aunque estas seis medidas no detendrán todos los tipos posibles de amenazas, harán un trabajo decente defendiéndose contra la mayoría de los ataques que lleguen a nuestro sitio. También puedes y debes intentar de proteger la base de datos de tu sitio cambiando el prefijo predeterminado de la tabla que viene por defecto.

De todas formas os dejamos justo debajo de aquí un excelente plugin que puede realizar todas estas acciones, incluso, la posibilidad de configurar una programación de un backup automático de nuestra base de datos.

Te dejamos un enlace a un plugin de seguridad ITHEMES SECURITY que incluye todo lo expuesto en este artículo de una forma sencilla y rápida:

ITHEMES SECURITY

Quizás te interese: 10 razones para elegir WordPress para tu proyecto

Pedro D. García Lorencio
Redactado por Pedro D. García Lorencio

Programador desde 2001 primero como freelancer y CEO de miscasasrurales.com. Ahora socio de 2 Veces Marketing desde enero de 2019, buscando siempre la perfección en el código fuente y minificar errores o bug.

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

blog