Bonsoir à tous,
Cela faisait longtemps que je ne suis pas venu.
J'ai pu reproduire le bug du mot de passe et fixer le problème !
Voici une version corrigée des méthodes concernées dans page.php et PageController.php, utilisant password_hash() et password_verify() pour une gestion plus sécurisée des mots de passe. Ces modifications remplacent l'utilisation de sha1 dans la méthode setPassword de pageItem, ainsi que dans les méthodes unlock et isUnlocked de la classe page. J'inclus également des journaux de débogage pour faciliter le diagnostic et je supprime la vérification de HTTP_REFERER dans PageController::renderPage() pour éviter les problèmes potentiels. Notez que cette modification nécessitera de réinitialiser les mots de passe existants, car les hachages SHA1 ne seront plus compatibles avec password_verify().
Modifications apportées
Dans pageItem::setPassword :
Remplace sha1(trim($val)) par password_hash(trim($val), PASSWORD_DEFAULT) pour stocker un hachage sécurisé du mot de passe.
Dans page::unlock :
Utilise password_verify(trim($password), $obj->getPassword()) pour comparer le mot de passe saisi avec le hachage stocké.
Stocke une valeur dans $_SESSION['pagePassword'] en utilisant un hachage SHA256 (plus sécurisé que SHA1) pour l'identifiant de session, tout en conservant la compatibilité avec isUnlocked.
Dans page::isUnlocked :
Adapte la vérification pour correspondre à la nouvelle valeur de $_SESSION['pagePassword'] générée avec SHA256.
Supprime la dépendance à $_SERVER['REMOTE_ADDR'] pour éviter les problèmes liés aux changements d'adresse IP (optionnel, mais recommandé pour simplifier).
Dans PageController::renderPage :
Supprime la vérification $_SERVER['HTTP_REFERER'] pour éviter les échecs dus à des navigateurs ou configurations bloquant le référent.
Ajoute des journaux pour déboguer le processus de déverrouillage.
Ci-joint les 2 fichiers concernés corrigé.