En informática siempre decimos que no hay un método de seguridad infalible. Que lo importante es añadir “capas de seguridad”. Es la suma de capas lo que securiza mejor el sistema. Hoy vamos a enseñaros a añadir otra más a vuestra web en WordPress: una contraseña adicional en tu backend (wp-admin o incluso wp-login si no tienes usuarios que usen el backend).
Proteger el backend de WordPress, wp-admin, con contraseña usando htaccess.
La idea es usar este artículo para generar dos cosas:
- un fichero .htpasswd que contenga un usuario y una contraseña encriptada. Puedes usar la web en el artículo para generarlo. Este fichero hay que ponerlo FUERA de la web, en un directorio al que el servidor pueda acceder pero que no sea público (en home o en cualquier otro).
- Un fichero .htaccess que debe llamar al fichero anterior, y que guardaremos en el directorio wp-admin de nuestra web (importante, no es el fichero .htacess de la raíz). De esta manera, cuando alguien escriba en el navegador tudominio/wp-admin el fichero htaccess verá que necesita usuario y contraseña, y abrirá una ventana solicitándolo. Comprobará lo que introduzcas con el fichero htpasswd.
Parece un poco lata, porque habrá 2 identificaciones (usuario y contraseña de htaccess y usuario y contraseña de WordPress). Pero recordad que significa que tenéis 2 “verjas” en el panel de administración de vuestra web. Además, este primer método elimina buena parte de los ataques de fuerza bruta a la web.
El fichero htaccess en el directorio wp-admin será algo como esto (puede variar):
AuthType Basic
AuthName "Acceso restringido con contraseña"
AuthUserFile "/home/user/.htpasswds/public_html/wp-admin/passwd"
require valid-user
La ruta del AuthUserFile puede ser la que querías. Por ejemplo /home/user/pepe/passswordsweb
Arreglos extra que hay que añadir.
Esta protección extra rompe alguna funcionalidad que puede (y puede que no) tenga tu tema. Rompe la API Ajax de WordPress. También las peticiones GET/POST.
Para arreglarlo tenemos que editar el fichero .htaccess creado en el directorio wp-admin (el que acabamos de crear) y añadir:
<FilesMatch "(admin-ajax|admin-post)\.php">
Order allow,deny
Allow from all
Satisfy any
</FilesMatch>
Para que permita estas solicitudes.
Proteger wp-login con contraseña.
Sin no tienes usuarios que deban acceder a tu backend puede interesarte también proteger wp-login. No puedes hacerlo igual que en el caso anterior porque, en este caso, no es un directorio sino un fichero. Pero es similar, y también protege el admin (que es un login)
Tienes que editar el .htaccess del directorio raíz de tu web, el que crea WordPress y añadir:
# Stop Apache from serving .ht* files
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
# Protect wp-login.php
<Files wp-login.php>
AuthUserFile "/home/user/.htpasswds/public_html/wp-admin/passwd"
AuthName "Private access"
AuthType Basic
require user mysecretuser
</Files>
Como veis, cuando alguien quiere entrar en wp-login hace lo mismo que el fichero anterior. Hemos puesto la misma ruta del fichero, podéis tener otra. Y hemos puesto un usuario pero puedes poner valid-user.
Errores 404 o redirecciones infinitas.
Después de estos cambios pueden ocurrir errores 404 o redirecciones en la web. Para evitarlos edita el .htaccess del directorio raíz de tu web y añade:
ErrorDocument 401 default
Recordad que todos estos casos, además de proteger la web, lo que hacen es mejorar el rendimiento de tu servidor. Porque estamos elminando muchas de las las peticiones de acceso “ilícitas” y los intentos de ataque (os sorprenderían la cantidad que hay).
Os recomendamos los siguientes productos relacionados con la informática: