Moin,
also so ist das jetzt viel besser. So kann man auch die Benutzerdaten mal sichern und hat das alles unter Kontrolle. Ich habe das jetzt hier eingebaut:
https://www.mobirise-tutorials.com/VN-B ... mbers.html
Folgende Kleinigkeiten sind mir aufgefallen:
> Placeholder =
benutzername >
Benutzername schreibt man groß!
> Wenn ich unangemeldet die
geschützte Seite aufrufe, werde ich immer noch nicht zum Login weitergeleitet!
> Ich habe eine Datei "
delete-old-tmp-login.php" erstellt (unten) sonst bleibt die alte JSON als Dateileiche im
/tmp/ Verzeichnis. Bitte nach Gebrauch sofort wieder vom Server löschen:
Code: Alles auswählen
<?php
declare(strict_types=1);
header('Content-Type: text/plain; charset=utf-8');
/*
* Alte VN-Login-Benutzerdatei aus dem PHP-Temp-Verzeichnis löschen.
* Diese Datei nach erfolgreicher Ausführung sofort wieder vom Server entfernen.
*/
$host = $_SERVER['HTTP_HOST'] ?? 'local';
$siteKey = md5($host);
$tmpDir = sys_get_temp_dir();
$usersFile = $tmpDir . DIRECTORY_SEPARATOR . 'vn_login_users_' . $siteKey . '.json';
echo "Host: " . $host . PHP_EOL;
echo "MD5 SiteKey: " . $siteKey . PHP_EOL;
echo "Temp-Verzeichnis: " . $tmpDir . PHP_EOL;
echo "Gesuchte Datei: " . $usersFile . PHP_EOL;
echo str_repeat('-', 70) . PHP_EOL;
if (!is_file($usersFile)) {
echo "Hinweis: Die alte Login-Datei wurde nicht gefunden." . PHP_EOL;
echo "Es gibt für diesen Host offenbar keine passende Datei im Temp-Verzeichnis." . PHP_EOL;
exit;
}
if (!is_readable($usersFile)) {
echo "FEHLER: Die Datei wurde gefunden, kann aber nicht gelesen werden." . PHP_EOL;
exit;
}
echo "Datei wurde gefunden." . PHP_EOL;
echo "Dateigröße: " . filesize($usersFile) . " Bytes" . PHP_EOL;
if (unlink($usersFile)) {
echo "OK: Die alte Login-Datei wurde gelöscht." . PHP_EOL;
} else {
echo "FEHLER: Die Datei konnte nicht gelöscht werden." . PHP_EOL;
echo "Bitte Rechte oder Server-Konfiguration prüfen." . PHP_EOL;
}
Passwort-Verwendung Chaos
Mir ist beim Testen aufgefallen, dass es bei Login-Anwendungen problematisch ist, wenn nur ein Passwort verwendet wird, aber kein Benutzername. Das hatte ich Dir aber schon mehrmals gesagt - jetzt haben wir den Salat.
Das Kernargument ist: Ohne Benutzername fehlt dem Browser und auch der Anwendung eine eindeutige Zuordnung.
Dadurch entsteht genau dieses Autofill-Chaos. Logge ich mich zum Beispiel ein mit
Benutzer: Tester
Passwort: tester
… und gehe zur Passwortänderung steht da:
> im
Firefox am "Auge" bei "Altem Passwort" > Tommy123
> im
Chrome am "Auge" bei "Altem Passwort" > geheimer_arsch
> im
Edge am "Auge" bei "Altem Passwort" > na-ich
Eigentlich sollte bei "altem Passwort" und auch sonst
nirgendwo irgendetwas stehen. Das musst Du unbedingt noch ändern!
Das geht gar nicht und ist ein "No-Go"
Browser wie Firefox, Chrome oder Edge erkennen Passwortfelder automatisch und speichern diese Zugangsdaten oft im eigenen Passwortmanager. Wenn eine Anwendung nur mit einem Passwort arbeitet, kann der Browser nicht sauber zuordnen, zu welchem Benutzer dieses Passwort gehört. Dadurch werden alte Testpasswörter oder falsche Zugangsdaten später plötzlich wieder automatisch eingetragen.
Genau das ist bei mir passiert: In verschiedenen Browsern erscheinen unterschiedliche gespeicherte Passwörter, die ich in der Anwendung selbst gar nicht mehr finden kann.
Besser ist daher immer die klassische Kombination aus:
Benutzername + Passwort
Dann kann der Browser die Zugangsdaten eindeutig einer bestimmten Domain und einem bestimmten Benutzer zuordnen. Auch für mehrere Benutzer, Passwortänderungen, Admin-Konten und spätere Erweiterungen ist das deutlich sauberer.
Zusätzlich sollten die Formularfelder passende autocomplete-Attribute bekommen, zum Beispiel:
Code: Alles auswählen
<input type="text" name="username" autocomplete="username">
<input type="password" name="password" autocomplete="current-password">
Bei einer Passwort-ändern-Seite entsprechend:
Code: Alles auswählen
<input type="password" name="oldpassword" autocomplete="current-password">
<input type="password" name="newpassword" autocomplete="new-password">
<input type="password" name="newpassword2" autocomplete="new-password">
So kann der Browser besser
unterscheiden, ob es um ein bestehendes Login-Passwort oder um ein neu zu vergebendes Passwort geht.
Aus meiner Sicht ist „nur Passwort“ zwar für ganz einfache Schutzseiten bequem, aber für echte Login-Anwendungen mit Admin, Benutzern und Passwortänderung sollte man unbedingt Benutzername + Passwort verwenden.