Ocultar wp-login y wp-admin en WordPress puede parecer sencillo, de hecho lo mejor es utilizar las funciones que nos traen algunos plugins de seguridad como All in One o Siteguard, pero una vez instalado y hechas algunas comprobaciones como si está activado “mod_rewrite” en nuestro servidor, vemos que algunos plugins olvidan que si se accede a wp-admin, el sistema nos redirige a la página de login, o en algunos casos, nos muestra un mensaje de alerta.

Después de probar otros plugins destinados a tal fin, he podido comprobar que incluso algunos de ellos dejan acceder a wp-login si lo escribimos con la extensión de archivo .php, o nos marcan una ruta con “?nueva ruta”, la cual nos devuelve una página de error 404 si algún dato no es correcto, algo que no es de mucha ayuda a los usuarios de nuestro sitio web.

Al principio de este artículo, he mencionado 2 plugins que suelo utilizar para ocultar las rutas de acceso al sistema de forma correcta, el problema es que el primero de ellos, nos devuelve una página con un warning, que le dice al intruso que en efecto, esto es un WordPress, peor es el segundo que redirige la página al login directamente si no activamos la opción para ocultar wp-admin, lo cual tampoco nos servirá de mucho si nuestro server no tiene “mod_rewrite” activado. Entonces ¿Como hacemos para ocultar el acceso al sistema? ¿No existe un plugin que lo haga de forma correcta y segura?

No desaconsejo el uso de estos plugins, muy al contrario, aconsejo su uso siempre que se hagan las comprobaciones previas a las rutas:
tudominio/wp-admin/
tudominio/wp-login
tudominio/wp-login.php

Si después de comprobar estas rutas, se puede encontrar o acceder a alguna de ellas, o bien el sistema nos delata mostrando un aviso, podemos usar una función que compruebe ciertos datos antes de acceder, podemos usar cualquier comprobación siempre y cuando sea lógica, en este caso, vamos a hacerlo comprobando el tipo de usuario, dado que no existe porque no se ha logueado, lo enviaremos a una página 404, pero podemos elevar el nivel de seguridad, podemos evitar además que si se ha logueado, para lo cual debe conocer la ruta que hemos definido en el plugin (Siteguard o All In One entre otros), tenga acceso al panel, sacándolo fuera y enviándolo de nuevo a una página 404.

La función es muy sencilla:

// DIDESWEB BLOCK ADMIN
add_action( 'init', 'ddw_block_admin' );
function ddw_block_admin() {
    if ( is_admin() && !current_user_can('update_core') ) {
        wp_redirect( site_url('/404') );
        exit;
    }
}

Con esta función, cualquier usuario sin privilegios de Administrador, será enviado fuera del sistema de forma automática en caso de encontrar la ruta e intentar acceder, pero puede que en tu caso prefieras evitar que accedan otros usuarios.

current_user_can()

En el codex de WP puedes encontrar un apartado con todos los usuarios y roles que existen para modificar esta función a tu antojo.

¡No utilices current_user_can(‘administrator’)! Ni cualquier otra forma de comprobar roles de usuario con esta función, en la web de Cybmeta hay un artículo donde se habla de porque no debemos utilizar current_user_can() para comprobar roles de usuario.

Aunque parezca un tema muy visto, no está tan solucionado como parece, por esta razón he escrito este artículo, el cual espero que os sirva de ayuda en futuros proyectos y mejore la seguridad de vuestro WordPress.

Valoraciones


Sé el primero en valorar

* Tu valoración puede tardar hasta 72 horas en publicarse.

He leido y acepto el Aviso legal y condiciones de uso

Utilizamos cookies propias y de terceros para personalizar el contenido y los anuncios, ofrecer funciones de medios sociales y analizar el tráfico. Además compartimos información sobre el uso que haces de nuestra web con nuestros partners de medios sociales, de publicidad y de análisis web. Si continúas navegando estás dando tu consentimiento para la aceptación de nuestra Política de cookies.

ACEPTAR
Aviso de cookies