Sicherung der Passwortspeicherung in Drupal 7: Leitfaden für bewährte Verfahren
Die Sicherheit von Passwörtern bleibt ein kritisches Anliegen in der Webentwicklung, insbesondere angesichts der zunehmenden Häufigkeit von Cyberangriffen. Dieser Leitfaden erklärt, wie Sie eine sichere Passwortspeicherung in Drupal 7 mit modernen PHP-Passwort-Hashing-Techniken implementieren können.
Grundlagen der Passwortsicherheit verstehen
Sichere Passwortspeicherung basiert auf korrektem kryptographischen Hashing anstatt einfacher Verschlüsselung oder Speicherung im Klartext. Die standardmäßige Passwortbehandlung von Drupal 7 ist ziemlich robust, aber das Verständnis, wie man zusätzliche Sicherheitsmaßnahmen implementiert, kann für benutzerdefinierte Implementierungen oder spezifische Anforderungen wertvoll sein.
Sichere Passwortspeicherung implementieren
Verwendung der modernen Passwort-Hashing-API
Die Passwort-Hashing-API von PHP bietet einen standardisierten, sicheren Ansatz zur Passwortverwaltung. Für Drupal 7-Websites, die auf PHP-Versionen 5.3.7 bis 5.5.0 laufen, müssen Sie die password_compat-Bibliothek installieren:
composer require ircmaxell/password_compat
Diese Bibliothek bietet vier wesentliche Funktionen für die Passwortverwaltung:
// Ein neues Passwort für die Speicherung hashen
$hashedPassword = password_hash(
$plainTextPassword,
PASSWORD_DEFAULT,
['cost' => 12]
);
// Ein Passwort gegen einen gespeicherten Hash überprüfen
$isValid = password_verify($inputPassword, $storedHash);
// Beispiel-Implementierung
if ($isValid) {
// Passwort ist korrekt - Fortfahren mit der Authentifizierung
drupal_set_message('Authentifizierung erfolgreich');
} else {
// Ungültiges Passwort
drupal_set_message('Ungültige Anmeldeinformationen', 'error');
}
// Überprüfen, ob ein Passwort neu gehasht werden muss (z.B., wenn Sicherheitsparameter geändert wurden)
if (password_needs_rehash($storedHash, PASSWORD_DEFAULT, ['cost' => 12])) {
// Den neuen Hash speichern
$newHash = password_hash($plainTextPassword, PASSWORD_DEFAULT, ['cost' => 12]);
// Den gespeicherten Hash in Ihrer Datenbank aktualisieren
}
// Informationen über den Hash abrufen
$hashInfo = password_get_info($storedHash);
Integration mit Drupal 7
Um dies in Ihrer Drupal 7-Website zu implementieren, könnten Sie ein benutzerdefiniertes Modul erstellen:
<?php
/**
* Implementiert hook_user_presave().
* Stellt sicher, dass Passwörter ordnungsgemäß gehasht werden, bevor sie gespeichert werden.
*/
function mymodule_user_presave(&$edit, $account, $category) {
if (isset($edit['pass'])) {
$edit['pass'] = password_hash(
$edit['pass'],
PASSWORD_DEFAULT,
['cost' => 12]
);
}
}
/**
* Benutzerdefinierte Funktion zur Passwortüberprüfung.
*/
function mymodule_verify_password($password, $hash) {
return password_verify($password, $hash);
}
Sicherheitsüberlegungen
1. Kostenfaktor: Der 'cost'-Parameter (in unseren Beispielen auf 12 gesetzt) bestimmt die rechnerische Komplexität des Hashs. Höhere Werte erhöhen die Sicherheit, aber auch die Verarbeitungszeit. Passen Sie dies an die Fähigkeiten Ihres Servers an.
2. Hash-Speicherung: Speichern Sie immer den kompletten Hash-String, der die Informationen über Algorithmus, Kosten und Salt enthält.
3. Passwortvalidierung: Implementieren Sie angemessene Anforderungen an die Passwortkomplexität:
function mymodule_validate_password_strength($password) {
$errors = array();
if (strlen($password) < 8) {
$errors[] = t('Das Passwort muss mindestens 8 Zeichen lang sein.');
}
if (!preg_match('/[A-Z]/', $password)) {
$errors[] = t('Das Passwort muss mindestens einen Großbuchstaben enthalten.');
}
// Fügen Sie bei Bedarf weitere Validierungen hinzu
return $errors;
}
Best Practices
1. Speichern Sie niemals Passwörter im Klartext
2. Verwenden Sie starke Salting-Methoden (automatisch durch password_hash gehandhabt)
3. Implementieren Sie Passwortalterungsrichtlinien, wo dies angemessen ist
4. Regelmäßige Sicherheitsaudits des passwortbezogenen Codes
5. Halten Sie PHP und alle sicherheitsrelevanten Bibliotheken auf dem neuesten Stand
Fehlerbehandlung
Implementieren Sie immer eine angemessene Fehlerbehandlung bei der Arbeit mit Passwörtern:
try {
$hashedPassword = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
if ($hashedPassword === false) {
watchdog('security', 'Passwort-Hashing fehlgeschlagen', array(), WATCHDOG_ERROR);
throw new Exception('Fehler bei der Passwortverarbeitung');
}
} catch (Exception $e) {
// Behandeln Sie den Fehler angemessen
drupal_set_message(t('Während der Passwortverarbeitung ist ein Fehler aufgetreten.'), 'error');
}
```
Indem Sie diese Richtlinien befolgen und angemessene Maßnahmen zur Passwortsicherheit implementieren, können Sie die Sicherheit des Authentifizierungssystems Ihrer Drupal 7-Website erheblich verbessern.
