define('PASSWORD', 'streng Geheim');
Passwörter als Klartext zu hinterlegen ist keine gute Idee. Besser man speichert nur einen gesalzenen Hash. Auf Linux-Systemen kann man sich mit dem folgenden Bash-Skript so einen Hash generieren lassen:
php -r 'echo "Passwort:"; system("stty -echo"); $password = rtrim(fgets(STDIN),"\n"); system("stty echo"); $hash = password_hash($password, PASSWORD_DEFAULT); echo $hash;'
Hier die Erläuterung:
php -r
führt den nachfolgenden PHP-Code aus.
echo "Passwort:"; // Fordert den Benutzer auf sein Passwort einzugeben
system("stty -echo"); // Deaktiviert die Bildschirmausgabe und verhindert, dass das Passwort in der Bash-History auftaucht
$password = rtrim(fgets(STDIN),"\n"); // Liest das Passwort ein
system("stty echo"); // Reaktiviert die Bildschirmausgabe von Zeichen
$hash = password_hash($password, PASSWORD_DEFAULT); // Erzeugt den gesalzenen Passwort-Hash
echo $hash; // Gibt den neu generierten Hash aus
ACHTUNG: Bei Windows funktioniert das Unterdrücken der Ausgabe wie oben nicht.
Beispielausgabe: $2y$10$ysZS.7iJvmEantAioBKHK.CJ.jFRJGkzcRV5v.n0Zl1gZhc1YJ.ay
Außerdem will man solche Konfigurations-Daten für gewöhnlich nicht im Quelltext stehen haben, das erschwert unter anderem die Versionierung und das Deployment (Hintergrund) und macht es unsicherer. Ein besserer Speicherort dafür sind Umgebungsvariablen, wenn man behutsam damit umgeht. Damien Alexandre gibt dazu ein paar Tipps.
Bei Apache-Webservern kann man mit der SetEnv-Direktive Umgebungsvariablen setzen.
SetEnv APP_PASSWORD_HASH $2y$10$ysZS.7iJvmEantAioBKHK.CJ.jFRJGkzcRV5v.n0Zl1gZhc1YJ.ay
In PHP kann man die Umgebungsvariable mit getenv auslesen und mit password_verify auf sichere Weise mit der Benutzereingabe vergleichen:
$password = $_POST['password'];
$hash = getenv('APP_PASSWORD_HASH');
$isPasswordCorrect = password_verify($password, $hash);