Añadir un pestillo de seguridad a WordPress

Publicado en Desarrollo a medida hace 3 años y 5 meses. Leído 1277 veces.

imagen destacada

Después de hablar de porque WordPress es un CMS lento, hoy toca hablar de como mejorar su seguridad.

Uno de los problemas de seguridad más comunes con WordPress es el acceso al panel de control. Dado que el acceso siempre está ubicado en el mismo lugar ( wp-admin ) es muy fácil crear un script que trate de averiguar las contraseñas por fuera bruta. De hecho, cada cierto tiempo hay auténticas oleadas de ataques a WordPress, que normalmente acaban en dos posibles situaciones: o consiguiendo tu clave o bloqueando el acceso al gestor de tu sitio web.

La recomendación que suele hacerse es activar el acceso en dos pasos, cambiar la url de wp-admin o el acceso mediante otro tipo de medios( DNIe, CAPTCHA, etc ).

En el caso del acceso en dos pasos está claro su defecto. ¿ Si han conseguido pasar la primera contraseña no van a poder con dos ?, cambiar la url de wp-admin es encontrarse muchos problemas( WordPress tiene mucho código con wp-admn hardcodeado. Entra, por ejemplo, en /wp-admin/admin.php y lo verás ) y probar otros sistemas de control de acceso hará que no entren en el panel pero que igualmente nos bloqueen el acceso.

¿ Qué solución queda ?, yo uso un "pestillo de seguridad". Piensa en la puerta de tu casa, seguro que entras con la llave pero cuando ya es de noche y sabes que nadie más va a llegar, ¿ qué haces ?, echas el pestillo a la puerta. Desde ese momento, llegue alguien con llave o sin ella, no podrá entrar hasta que no vuelvas a quitar el pestillo. Un pestillo de seguridad es lo mismo, mientras que esté echado nadie podrá entrar en tu gestor de contendos. Ni aunque tengan la clave. Una vez que lo quites, se entrará de modo normal ( con un usuario y clave ). También evitarás bloqueos, ya que pararás en seco cualquier ataque.

Nuestro cerrojo virtual constará de dos elementos:

  • Un archivo .htaccess que es el que hará de pestillo. Cuando tenga el punto delante(.htacess) estará echado. Cuando no tenga el punto(htaccess) estará quitado.

  • Un archivo close.php que es el que determinará que acción realizar cuando intenten entrar cuando el pestillo esté echado.

  • Un archivo opcional close.html, por si queremos mostrar una página html como respuesta.

Montaje

Creamos el archivo .htaccess en el directorio /wp-admin/ de nuestro WordPress. Su contenido será el siguiente

RewriteEngine on
RewriteBase /wp-admin/
RewriteCond %{REQUEST_FILENAME} !^(.+).(css|js)$
RewriteCond %{REQUEST_FILENAME} !^(.+).(gif|jpg|jpeg|png|ico)$
RewriteCond %{REQUEST_FILENAME} !^(.+).(eot|svg|ttf|woff)$
RewriteRule ^(.+)$ close.php [NC]

Con esto le decimos a nuestro servidor que toda petición que no sea ni una fuente, ni una imagen ni un archivo CSS o Javascript, la reenvíe a close.php. Este archivo, close.php, también debe estar dentro del directorio /wp-admin/ y gracias a él podremos realizar distintas acciones según el contenido que le pongamos( y recordemos que será únicamente mientras nuestro pestillo esté echado) . Algunos ejemplos

  • Mostrar un simple: "Acesso denegado".
 die("Acceso denegado");
  • Mostrar el archivo close.html
echo file_get_contents(__DIR__.'/close.html');
  • O redirigir a alguna otra url:
define('NEW_URL', 'http://google.es');

header('Location: '.NEW_URL);
die();

Activación / Desactivación

Para echar nuestro pestillo, basta con que el archivo htaccess esté con el punto delante: .htaccess Para quitarlo, le quitamos el punto de delante: htaccess Una vez echado nuestro pestillo podremos irnos a dormir tranquilos. Nadie podrá entrar, ni aunque tenga la contraseña correcta. Por lo que un ataque de fuerza bruta nunca tendrá efecto. Cuando toque día de trabajar con nuestro CMS, entramos por FTP, quitamos el pestillo y usamos nuestro gestor de contenidos normalmente. Cuando acabe nuestra jornada, entramos por FTP y lo volvemos a echar. Simple y eficaz.

4 comentarios

¡Muy útil el pestillo! Aunque creo que se me haría un poco “pesado” andar modificando el archivo para acceder.

Yo por mi parte le añadiría un “Order allow, deny” y así sólo tendrías que conectarte siempre vía Proxy/VPN (o si tienes IP estática en casa ni lo necesitas :P). Es una manera de mantener el pestillo siempre echado (incluso cuando estás dentro) y que sólo acepte tus peticiones.

No obstante, ¡gracias por compartir!

Escrito por Gonzalo el 17-12-2014 a las 10:58

Gracias por tu aporte, Gonzalo,

Pienso que igual que un pestillo de casa, si vas a entrar y saliendo constantemente es un incordio. Para casos así, hay otras opciones como la activación/desactivación por url. Algo como:

http://trasweb.net/abreapestillo http://trasweb.net/echapestillo

Creo que un pestillo de seguridad es más cómodo y seguro que otros métodos como el acceso en dos pasos.

Gracias, Gonzalo, por escribir y estate atento porque en pocas horas estará un nuevo artículo. Un saludo

Además de lo que comentas, que es muy buena idea, ¿no es posible renombrar al usuario admin por otro o también está hardcodeado el nombre en los ficheros php además de la ruta a wp-admin? Eso me parece una buena chapuza de los programadores de WordPress

Hola, José, bienvenido por aquí.

Sí, el usuario “admin” se guarda en la base de datos. Por tanto, es posible renombrarlo y es una de las prácticas recomendadas. Pero, claro, con las contraseñas tan débiles que suele poner la gente, es muy fácil que en un ataque de fuerza bruta la adivinen.

Gracias por tu aportación, José, Nos vemos mañana :)

Escrito por Manuel Canga el 22-12-2014 a las 08:29

Deja un comentario

Puedes usar Markdown para formatear tu comentario.

Este sitio utiliza cookies propias y de terceros para mejorar tu experiencia con el sitio web. Al continuar con la navegación consideramos que acepta su uso.