Ajouter un mot de passe pour votre site WordPress
Pour diminuer les risques de vol de compte, il peut être intéréssant d’ajouter un mot de passe supplémentaire commun à tous les utilisateurs inscrits sur votre site.
Votre compte d’accès à l’administration de votre WordPress est protégé par un mot de passe que vous avez choisi lors de sa création. Parmi les membres inscrits sur votre site, on peut trouver des utilisateurs qui peuvent s’y connecter pour commenter, mais aussi des auteurs ou des contributeurs qui rédigent des articles. Aussi, vous souhaiteriez ajouter un mot de passe commun pour tout le monde, en plus du mot de passe personnel : un mot de passe pour le site.
Ajout du nouveau champ dans le formulaire de connexion
Avec le hook login_form
, il est possible d’ajouter du code HTML dans le formulaire de connexion. On en profite pour insérer le champ réservé au mot de passe supplémentaire.
Copier le code ci-dessous dans le fichier functions.php
présent à la racine de votre thème :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
function baw_login_form_add_field() { ?>
<p>
<label>Mot de passe du site<br />
<input name="site_pass" tabindex="30" type="password" class="input" id="site_pass" /></label><br />
Besoin d'un mot de passe ? <a href="/contact">Contactez nous</a> !
</p>
<?php
}
add_action( 'login_form', 'baw_login_form_add_field' );
[/pastacode]
Traiter le nouveau mot de passe
Sur le hook authenticate
, on peut empêcher un membre valide (on entend par là un membre qui a correctement entré toutes les autres informations) de se connecter. On le fait ici en vérifiant la valeur du mot de passe envoyée dans le formulaire de connexion dont le nom du champ est site_pass
.
Copier le code-ci dessous dans le fichier functions.php
présent à la racine de notre votre thème :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
function baw_login_authenticate( $raw_user, $username ) {
// Le nouveau pass supplémentaire
$new_password = 'ceci est un super mot de passe a retenir';
if( !empty( $username ) && ( !isset( $_POST['site_pass'] ) || $_POST['site_pass']!=$new_password ) ) {
// on secoue la fenêtre de login
add_action( 'login_head', 'wp_shake_js', 12 );
// et on court-circuite la fin du login en renvoyant une erreur
return new WP_Error( 'authentication_failed', '<strong>ERREUR</strong>: Le mot de passe du site est incorrect.' );
}
// ... sinon on renvoie ce qui en donné en entrée
return $raw_user;
}
add_filter('authenticate', 'baw_login_authenticate', 999, 2 );
[/pastacode]
Voici le résultat en image :
Vous voilà avec un mot de passe supplémentaire pour votre site !
20 Commentaires
Je découvre ! :)
Du coup on peut s’en servir pour faire un Captcha light non ? Inserer une image qui demande d’écrire le resultat de 2 + trois par exemple …
Bien sûr, avec ça tu as une bonne base. Si tu en fait un captcha partage le ici ! À bientôt :-)
Excelent, c’est le top pour les mots de passe des membres qui utilisent l’interface! merci pour cet article!
Bonjour,
Pourriez-vous m’indiquer comment insérer le champ réservé au mot de passe supplémentaire ?
Merci par avance,
-Jo
@joseph: tu peux copier coller chaque morceau de code de cet article et le mettre à la fin (avant le ?> si il existe) du fichier “functions.php” de ton thème.
A+
C’est parfait, merci Julio!
Si vous souhaitez aller plus loin dans la sécurité à ce niveau là, je vous propose aussi mon plugin “Baw More Secure login” qui est un niveau supérieur à cette astuce, mais basé sur cette astuce : http://baw.li/msl
Merci beaucoup. Vraiment utile en production cette astuce. A tweeter …
Idem. Je pense que je vais mettre ceci en place sur les sites clients en prod :)
Super je suis content que ça vous plaise et que ça serve aussi ! À bientôt
Bonjour,
Merci pour vos infos. J’aurai une question, comment faire pour bloquer une partie du site, par exemple mettre une page de téléchargement ou seuls des internautes ayant un mot de passe peuvent y accéder?
Pour me joindre: lykxie@yahoo.fr
Merci d’avance pour votre attention!
@LYKXIE: Il suffit de créer votre page et de lui mettre un mot de passe :)
Euh crée une page et passe son statut en privé ?
Ajouter un mots de passe complémentaire ok. On peut se dire que cela renforce la sécurité de notre site. Mais il est stocké en clair dans notre fichier functions.php. Donc au final ça ou rien c’est à peu près la même chose… A part obliger les utilisateurs du backofffice à perdre 5s pour renseigner un champs supplémentaire quel est le réel gain en terme de sécurité??
D’où ma question subsidiaire : comment proteger ce mot de passe? Ne devrait-il pas etre “hashé” au préalable? Voir même un hash du hash? Chiche… Quel méthode utiliser dans cette fonction pour masquer/sécuriser un peu plus ce mdp? Comment protéger notre fichier functions.php? Comment ce mdp complémentaire est transmis à wordpress lors de l’authentification? Comment procéder pour que notre super mdp ne soit pas intercepté?
Le réel enjeu est plutôt là.
Car comme je le dis plus haut: si notre mdp complémentaire n’est pas secure, à quoi bon l’ajouter? Hormis faire perdre du temps à nos utilisateurs???
Ce n”est pas d’eux dont nous avons à craindre mais de personnes bien moins intentionnées…
Bonsoir Sam.
Le mot de passe est en clair dans functions.php, tout comme ton mot de passe de base de données l’est dans wp-config.php. Si une personne arrivait à lire le contenu de fon fichier functions.php, c’est que le mot de passe ne lui servirait déjà plus, elle aurait déjà réussi à avoir un accès au delà de ça.
Il est possible mains inutile de sécuriser le mot de passe avec un hash (ou 2 ou 10).
Sécuriser ce fichier ? De la même façon que tu sécurise wp-config.php si tu veux.
Sécuriser un site est un travail de longue haleine, jamais terminé et où le risque 0 n’existe pas.
Ici le fait d’ajouter un mot de passe au site fait en sorte que si une personne se fait dérober son mot de passe car le pirate connait son mot de passe favori, il lui manquera le mot de passe du site, celui que la personne ne peut pas changer.
Alors oui ça fait entrer un pass de plus, mais si tu as un site avec des centaines de membres, alors ce n’est peut-être pas à faire.
Toutes les sécurités ne sont pas à apposer aveuglément sur un site, chacun doit être réfléchis et leur interactions pensées.
Comment ce pass est transmis ? Comme le pass de ton compte, celà dépends si tu es en HTTPS ou pas.
Merci Julio pour ce complément d’information et ces précisions.
La partie sécurité de manière général n’est pas mon fort. Alors je pose des questions (bien souvent maladroitement…) aux gens d’expérience. Même si ici j’aurais peut-être dût prendre un peu de temps pour mieux comprendre le déroulement des choses… :)
Bien content que tu nous accordes du temps et de la patience pour nous éclairer.
Bonne continuation.
Bonjour,
on peut envisager cela uniquement par la partie Admin ? concrètement sur un Woocommerce, tu déconseilles ?
Merci
Bonjour
peut-on bloquer que pour la partie Admin, et donc sans conséquences pour Woocommerce?
Merci
bonjour,
Moi je voudrais savoir si c’est possible de mettre d’un mots de passe commun pour se connecter à mon site sans identifiants, juste le mots de passe.
Merci pour vos réponses.
Cordialement,
Bonjour Julio et merci pour les divers éléments que tu apportes à la communauté des utilisateurs.
Juste une petite question sur ce post un peu ancien… Est il toujours d’actualité avec la version 4.4 ?
Merci encore.