Wenn ein Login-Versuch fehlschlägt, antwortet das Skript mit einer präzisen Fehlerbeschreibung:
Ja. Aber nur im Debug-Modus, der im Config-Teil abschaltbar ist:
Quelltext (so seit 2016):
(login.php)
$HashedPassword = getHashedPassword( $_POST['username'] );
if (false == $HashedPassword ) {
if ( DEBUG_MODUS ) {
error_log('Falscher Benutzer:' . $_POST['username']);
show_login($_POST['username'], 'Den Benutzer gibt es nicht.');
} else {
if ( USE_ERROR_LOG_FOR_LOGIN_ERRORS ) { error_log( 'ftx_login_error' ); }
show_login( $_POST['username'], 'Fehler bei der Anmeldung' );
}
exit;
}
// Schritt 2: Überprüfen des Passwortes
if (! password_verify ( trim( $_POST['passwort'] ), $HashedPassword ) ) {
if ( DEBUG_MODUS ) {
error_log( 'falsches Passwort' );
show_login($_POST['username'], 'Falsches Passwort.');
} else {
if ( USE_ERROR_LOG_FOR_LOGIN_ERRORS ) { error_log('ftx_login_error'); }
show_login( $_POST['username'], 'Fehler bei der Anmeldung' );
}
exit;
}
auth_config.php:
// Befindet sich das System im Debug-Modus?
define( 'DEBUG_MODUS', true );
// Einstellung für Setup/Entwicklung/Debugging:
if( DEBUG_MODUS ) { error_reporting( E_ALL ); } else { error_reporting( NULL ); };
Weiterhin sollte beim Session-Start die Option 'cookie_httponly' => true gesetzt werden, damit das Cookie nicht von JavaScript ausgelesen werden kann.
Soweit ich das weiß ist das eine Einstellung, welche grunsätzlich schon in der PHP.ini aktiviert werden sollte. Nicht im Skript.
Das Skript funktioniert sowohl mit HTTPS als auch mit unverschlüsseltem HTTP.
Auch das ist m.E. nicht Sache des Skriptes sondern der Serverkonfiguration. Wenn das Skript gestartet wurde, dann sind die Daten bereits übertragen und ggf. für einen Angreifer sichtbar. Dann noch in Schönheit zu sterben ist nutzlos.
Für die PHP 5.3 Kompatibilität … Im Code wird die PHP-Funktion rand dafür benutzt ...
(Dann folgt ein Auszug aus dem Handbuch, der random_int() empfiehlt.
Du kritisierts die Verwendung von rand()
aber das mir nahe gelegte random_int()
gibt es erst seit PHP 7. Wieso sollte ich also random_int()
verwenden um die Kompatibilität zu PHP 5.3 herzustellen? Weil der Syntaxfehler dann das Ausführen verhindert?