web-dev-qa-db-fra.com

Problèmes après wp_set_password () contenant une apostrophe

Nous utilisons donc quelques éléments personnalisés dans notre WP et l'un d'entre eux est un formulaire PW-Recovery. En utilisant cela en interne, nous définissons le mot de passe avec

wp_set_password($password, $userId)

Dernièrement, nous avons réalisé un problème avec les mots de passe contenant le caractère apostrophe "

Si vous définissez un mot de passe avec ceci, l'utilisateur ne pourra plus se connecter avec le même mot de passe que celui qui vient d'être défini. Nous n'avons rien appliqué au processus de connexion et je peux vérifier que le mot de passe correct a été entré dans la fonction wp_set_password() ainsi que dans le formulaire de connexion.

Tous les indicateurs permettant de rechercher des erreurs potentielles seraient très utiles. Merci pour votre temps.

Mise à jour 1

En utilisant wp_signon(), l'utilisateur peut se connecter en utilisant le mot de passe Test"123

Utiliser wp-login.php?page=login et entrer le mot de passe Test"123 ne fonctionnera pas

recherche actuellement de tous les filtres qui pourraient éventuellement interférer avec cela ...

Mise à jour 2

Cela me semble être une fonctionnalité/un bug non documenté de wordpress?

Tous les plugins ont été désactivés. Le thème non modifié twentefifteen a été utilisé. Changer le mot de passe en utilisant wp_set_password() change le PW dans la base de données. Toutefois, si vous utilisez un mot de passe avec " ou ', vous serez incapable de vous connecter à l'aide de wp-login.php. Cela vous donnera une erreur d'identification invalide.

Cependant, en utilisant les mêmes données de connexion et wp_signon(), cela fonctionne. Je suis juste désemparé, transmettant probablement à des forums de bogue de wp.

Mise à jour 3

J'utilise ce plugin coupé pour réinitialiser et tester la connexion.

function resetLogin() {
//    wp_set_password('Test"123', 1);
    wp_update_user([
        'ID' => 1,
        'user_pass' => 'Test"123'
    ]);
}
//add_action('after_setup_theme', 'resetLogin');

function testLogin() {
    var_dump(wp_signon([
        'user_login' => 'admin',
        'user_password' => 'Test"123',
        'remember' => true
    ], false));
}
//add_action('after_setup_theme', 'testLogin');

Pour tester, je commente dans add_action - resetLogin une fois, et le désactive immédiatement avant de faire quoi que ce soit sur la page. Ceci annule immédiatement la connexion sur wp-login.php

3
Sam

La résolution est assez simple. Ces fonctions nécessitent que les mots de passe soient correctement protégés. Alors

Au lieu de ceci:

wp_set_password('Test"123', $userId);

Vous devez faire ceci:

wp_set_password(wp_slash('Test"123'), $userId);

Il en va de même pour wp_update_user() et wp_signon(). Des informations supplémentaires et des mises à jour sur la documentation peuvent être visibles à partir de ce rapport de bogue:

6
Sam

Je ne sais pas si c'est exactement ce qui vous arrive, mais voici ce que dit le codex à propos de wp_set_password ():

Remarque: cette fonction doit être utilisée avec parcimonie et ne doit être utilisée que pour une application unique. L'utilisation incorrecte de cette information dans un plugin ou un thème peut entraîner une boucle infinie de réinitialisations de mot de passe si aucune précaution n'est prise pour éviter qu'elle ne s'exécute à chaque chargement de page.

https://developer.wordpress.org/reference/functions/wp_set_password/

Je pense que vous ne devriez l'utiliser que pour réinitialiser le mot de passe, puis le supprimer.

1
ThemesCreator