Der Username kommt laut deinem Code aus $_POST und wird auch überschrieben, bevor du ihn via echo ausgibst:
PHP:$username = $db -> real_escape_string($_POST['username']); if(!empty($username)){ echo "$username wurde engegeben";
Ah, da hast du recht. Stimmt, wenn du die PHPSESSID nirgends gegenüber Dritten leakst, brauchst du nicht zwingend einen Expiry Timeout. Siehe auch What's a good time period before refreshing CSRF token of the user session? und How frequent should the Token Updation in CSRF security be?.Sobald sich die PHPSESSID im Browser ändert wird mir die Fehlermeldung "CSRF Token Fehler" angezeigt
Das Ausgeben von genauen Fehlermeldungen ist i. Allg. schlechte Praxis. Im besten Fall verwirrst du normale Nutzer. Im schlimmsten Fall leakst du sensible Daten, die es einem Angreifer noch einfacher zu machen, für deine bestimmte Serverkonfiguration oder SQL-Queries Lücken zu finden.mysqli_query($db,"INSERT INTO user (username) VALUES ('$username')") or die ("MySQL-Error: " . mysqli_error($db));