- Slim::storeCroppedImage() vertraute dem vom Client gemeldeten Typ und
uebernahm die Endung aus dem Dateinamen; "shell.php" mit Typ image/png
landete als .php im public-Disk. Jetzt entscheidet
getimagesizefromstring() ueber die Bytes, die Endung kommt aus dem
geprueften Typ.
- Foto loeschen war ein GET-Link und liess sich per fremdem <img src>
ausloesen (CSRF); jetzt POST-Formular mit Token.
- Ohne Konto (users.account_id) bricht Upload/Loeschen mit 404 ab statt
mit einem Fatal.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>