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é.