strong passwords

Forzar el uso de contraseñas seguras en WordPress

Cuando se habla de seguridad en WordPress (o en internet en general) se suele comentar que uno de los mayores bugs de seguridad se encuentra entre el respaldo de la silla y la pantalla del ordenador.

Efectivamente: el mayor bug de seguridad es el usuario. Ya sea por desconocimiento, desidia, dejadez… el factor humano puede ser clave en la seguridad de nuestro sitio.

Y en lo que a seguridad se refiere, una de las cosas más importantes a proteger es nuestro usuario y contraseña. Ya he hablado en alguna ocasión sobre seguridad, pero antes de seguir voy a rescatar un par de enlaces para arraigar la importancia del uso de contraseñas seguras:

En el primer enlace vemos que año tras año las contraseñas más utilizadas siguen siendo 123456, abc123, qwerty, password… Un bot podría acceder a un sitio simplemente probando contra un diccionario de contraseñas y si utilizas una clave de este tipo te expones a ser hackeado fácilmente.

En el segundo enlace podemos testear cuanto tardaría un bot en hackear nuestra contraseña, ¿asustado/a?

Si tu contraseña está en el primer listado o el medidor de contraseña segura te dice que un bot la sacaría en pocos minutos, te aconsejo que leas el post que escribí hace tiempo sobre porqué cambiar el usuario y contraseña periódicamente.

Cómo forzar a los usuarios a utilizar contraseñas seguras en WordPress

Desde hace un tiempo WordPress incorporó un medidor de la fuerza de nuestra contraseña y un generador de contraseña segura.

generador clave

Esta característica está muy bien pero no te obliga a utilizar una contraseña segura. Simplemente marcando la casilla Confirma el uso de una contraseña débil podremos guardar una contraseña poco segura.

Vamos a agregar a nuestro functions.php o plugin de utilidades una función para comprobar que nuestra contraseña cumpla con una serie de normas:

<?php

function force_strong_passwords( $errors, $update, $user_data ) {
    $user_login = $user_data->user_login;
    $user_pass = $user_data->user_pass;

    if ( !is_null( $user_pass ) ) {
        if ( strtolower( $user_login ) === strtolower( $user_pass ) ) {
            $errors->add( 'my_distinct_user_pass', __( 'Username and password must be different', 'your_textdomain' ) );
        }
        if ( strlen( $user_pass ) < 8 ) {
            $errors->add( 'my_pass_length', __( 'Password must be at least 8 characters', 'your_textdomain' ) );
        }
        if ( ! preg_match( '/[0-9]/', $user_pass ) ) {
            $errors->add( 'my_pass_numeric', __( 'Password must have at least 1 numeric character', 'your_textdomain' ) );
        }
        if ( ! preg_match( '/[a-z]/', $user_pass ) ) {
            $errors->add( 'my_pass_lowercase', __( 'Password must have at least 1 lower case character', 'your_textdomain' ) );
        }
        if ( ! preg_match( '/[A-Z]/', $user_pass ) ) {
            $errors->add( 'my_pass_uppercase', __( 'Password must have at least 1 upper case character', 'your_textdomain' ) );
        }
    }
}
add_action( 'user_profile_update_errors', 'force_strong_passwords', 0, 3 );

Lo que hacemos es simplemente comprobar que:

  • El usuario y la contraseña no coincidan
  • Que tenga como mínimo 8 caracteres
  • Que al menos contenga 1 caracter numérico [0-9]
  • Que al menos contenga 1 caracter alfabético en minúsculas [a-z]
  • Que al menos contenga 1 caracter alfabético en mayúsculas [A-Z]
  • Si no se cumple alguna de estas condiciones arrojamos un error y no dejamos actualizar la contraseña

Si alguno de estos puntos no se cumple, añadimos un error que se nos mostrará en la pantalla de administración.

Eliminar la opción que permite a usuario la elección de una contraseña débil

También podemos añadir un fichero JS en la administración de nuestro WordPress que elimine el input que nos deja confirmar el uso de una contraseña débil. Bastará que este archivo contenga las siguientes líneas:

jQuery(document).ready(function ($) {
    $( ".pw-weak" ).closest('tr').remove();
});

Como puede observarse, simplemente eliminamos la fila tr que tiene la clase pw-weak. De este modo el usuario no puede confirmar el uso de contraseña débil y no se activará el botón de guardar cambios hasta que la contraseña elegida sea al menos de nivel medio.

¿Te ha resultado útil esta información? 🍺

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.

Comentarios

5 comentarios en Forzar el uso de contraseñas seguras en WordPress

    1. Hola Susana.

      Depende, si estás creando el tema a medida puedes meterlo dentro de una carpeta assets ó js. O si es un tema hijo lo mismo. O si prefieres hacerte un plugin, dentro de una carpeta assets ó js de tu plugin

      Saludos

Deja un comentario

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

  • El fin del tratamiento es únicamente la moderación de comentarios para evitar spam
  • La legitimación es tu consentimiento al comentar
  • No se comunicará ningún dato a terceros salvo por obligación legal
  • Tienes derecho al acceso, rectificación y eliminación de los comentarios