In der modernen Webentwicklung ist die Gewährleistung der Sicherheit von Benutzerkennwörtern von entscheidender Bedeutung. Mit der Weiterentwicklung der Technologie entstehen weiterhin neue Verschlüsselungsalgorithmen, und alte Algorithmen werden möglicherweise nicht mehr sicher oder nicht mehr für den aktuellen Anforderungen im Laufe der Zeit geeignet. Daher müssen Entwickler häufig die Kennwortverschlüsselungsalgorithmen ersetzen, ohne die Benutzererfahrung zu beeinflussen. PHP bietet eine Funktion password_needs_rehash () , die den reibungslosen Übergang von Kennwortverschlüsselungsalgorithmen einfacher und effizienter macht.
password_needs_rehash () ist eine integrierte Funktion in PHP, um zu prüfen, ob das gespeicherte Passwort neu eingebraucht werden muss. Seine Funktion besteht darin, festzustellen, ob der aktuell gespeicherte Kennworthash -Wert mit dem neuen Kennwortverschlüsselungsalgorithmus übereinstimmt oder ob er den neuen Algorithmusanforderungen erfüllt. Wenn sich der Kennwortverschlüsselungsalgorithmus ändert, können Entwickler diese Funktion verwenden, um den Kennwort -Hash automatisch zu aktualisieren, wenn sich der Benutzer anmeldet, ohne dass der Benutzer das Kennwort manuell zurücksetzen muss.
Die Funktion ist wie folgt definiert:
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">password_needs_rehash</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hash</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$algo</span></span><span> , </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$options</span></span><span> )
</span></span>$ Hash : Der gespeicherte Passwort -Hash -Wert.
$ algo : Neue Verschlüsselungsalgorithmen (z. B. password_bcrypt , password_argon2i usw.).
$ Optionen : Optionale Konfigurationsoption, normalerweise ein Kostenfaktor für ein Array, das Algorithmuskonfigurationen wie BCrypt enthält.
Rückgabe true Wenn das Passwort erneut aufgeweckt werden muss, geben Sie false zurück, wenn nicht aufgefordert wird.
Wenn sich der Benutzer anmeldet, verwenden wir zunächst den alten Verschlüsselungsalgorithmus, um das vom Benutzer eingegebene Kennwort zu überprüfen. Zu diesem Zeitpunkt müssen wir auch überprüfen, ob der gespeicherte Passwort-Hash erneut verhandelt werden muss. Verschlüsseln Sie bei Bedarf das Kennwort mit einem neuen Algorithmus und aktualisieren Sie den Hash -Wert in der Datenbank.
Nachdem das Passwort des Benutzers erfolgreich überprüft wurde, können Sie die Funktion password_needs_rehash () verwenden, um festzustellen, ob der aktuell gespeicherte Kennwort -Hash die Anforderungen des neuen Verschlüsselungsalgorithmus erfüllt. Wenn der Hash-Wert erneut verhandelt werden muss, verwenden Sie den neuen Algorithmus, um den Hash zu verschlüsseln und zu aktualisieren.
Nehmen wir an, wir haben den Verschlüsselungsalgorithmus von Password_Bcrypt verwendet, und jetzt müssen wir auf password_argon2i aktualisieren.
<span><span><span class="hljs-comment">// Holen Sie sich das vom Benutzer eingegebene Passwort</span></span><span>
</span><span><span class="hljs-variable">$user_input_password</span></span><span> = </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'password'</span></span><span>];
</span><span><span class="hljs-comment">// Holen Sie sich den gespeicherten Hash -Wert aus der Datenbank</span></span><span>
</span><span><span class="hljs-variable">$stored_hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getUserHashFromDatabase</span></span><span>(</span><span><span class="hljs-variable">$user_id</span></span><span>);
</span><span><span class="hljs-comment">// Überprüfen Sie Kennwörter mithilfe alter Verschlüsselungsalgorithmen</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">password_verify</span></span><span>(</span><span><span class="hljs-variable">$user_input_password</span></span><span>, </span><span><span class="hljs-variable">$stored_hash</span></span><span>)) {
</span><span><span class="hljs-comment">// Wenn der Hash-Wert erneut verurteilt werden muss</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">password_needs_rehash</span></span><span>(</span><span><span class="hljs-variable">$stored_hash</span></span><span>, PASSWORD_ARGON2I, [</span><span><span class="hljs-string">'memory_cost'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span> << </span><span><span class="hljs-number">17</span></span><span>, </span><span><span class="hljs-string">'time_cost'</span></span><span> => </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'threads'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>])) {
</span><span><span class="hljs-comment">// Verschlüsseln Sie Kennwörter mit dem neuen Verschlüsselungsalgorithmus</span></span><span>
</span><span><span class="hljs-variable">$new_hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">password_hash</span></span><span>(</span><span><span class="hljs-variable">$user_input_password</span></span><span>, PASSWORD_ARGON2I, [</span><span><span class="hljs-string">'memory_cost'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span> << </span><span><span class="hljs-number">17</span></span><span>, </span><span><span class="hljs-string">'time_cost'</span></span><span> => </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'threads'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>]);
</span><span><span class="hljs-comment">// Aktualisieren Sie den Hash -Wert in der Datenbank</span></span><span>
</span><span><span class="hljs-title function_ invoke__">updateUserHashInDatabase</span></span><span>(</span><span><span class="hljs-variable">$user_id</span></span><span>, </span><span><span class="hljs-variable">$new_hash</span></span><span>);
}
</span><span><span class="hljs-comment">// Erfolgreich anmelden,Führen Sie den entsprechenden Vorgang durch</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Erfolgreich anmelden!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// Fehlerkennwort</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Fehlerkennwort!"</span></span><span>;
}
</span></span>password_verify () : Wird verwendet, um zu überprüfen, ob das vom Benutzer eingegebene Passwort mit dem gespeicherten Hash -Wert übereinstimmt.
password_needs_rehash () : Überprüfen Sie nach erfolgreicher Überprüfung, ob der gespeicherte Hash den Anforderungen des neuen Verschlüsselungsalgorithmus erfüllt. Wenn eine Neueinschluss erforderlich ist, befolgen Sie die nächsten Schritte.
password_hash () : Wird verwendet, um Kennwörter mit dem neuen Verschlüsselungsalgorithmus zu verschlüsseln.
updateUserHashIndatabase () : Speichert das neue Kennwort -Hash in der Datenbank.
Bei Verwendung von Password_Needs_Rehash () zum Ersetzen des Passwortverschlüsselungsalgorithmus besteht der größte Vorteil, dass der Benutzer nicht aktiv eingreifen muss, und das System kann das Passwort -Hash -Upgrade automatisch abschließen, wenn sich der Benutzer anmeldet. Dieser Ansatz bietet mehrere wichtige Vorteile:
Nahtloses Upgrade : Benutzer müssen sich nur einmal anmelden, und das System aktualisiert automatisch den Kennwortverschlüsselungsalgorithmus, ohne das Kennwort zurückzusetzen.
Sicherheit verbessern : Durch den schrittweisen Übergang zu einem sichereren Verschlüsselungsalgorithmus kann das System die Gesamtsicherheit verbessern und Sicherheitslücken vermeiden, die durch die Verwendung veralteter Algorithmen verursacht werden.
Starke Kompatibilität : Während des Ersetzens des Verschlüsselungsalgorithmus ist der alte Hash -Wert weiterhin gültig, um die Rückwärtskompatibilität des Systems zu gewährleisten und nicht die registrierten Benutzer zu beeinflussen.
Das Ersetzen des Kennwortverschlüsselungsalgorithmus ist eine der erforderlichen Maßnahmen zur Verbesserung der Sicherheit. Bei der Implementierung müssen Sie jedoch die Benutzererfahrung und den reibungslosen Übergang des Systems berücksichtigen. Die von PHP bereitgestellte Funktion password_needs_rehash () kann Entwicklern helfen, die Kennwortverschlüsselungsalgorithmen reibungslos von alten Algorithmen zu neuen Algorithmen zu migrieren, ohne die Benutzer zu stören. Auf diese Weise kann die Sicherheit des Systems verbessert werden, während sichergestellt wird, dass die Anmeldeberfahrung des Benutzers nicht beeinträchtigt wird.