fix: 6 Claude-Audit-Fixes (3 CRIT + 3 HIGH)
CRITICAL: - Logout: LoginScreen statt MeloHome pushen (home_screen.dart) - Path Traversal: sanitizeDateiname() zentral + sync-loop abgesichert - SecureStorage: flutter_secure_storage für Token+Passwort (auth_service, navidrome) HIGH: - Seek: PlayerService.seek() reload-frei (audio_handler) - Play/Pause: Zielzustand statt Toggle für System-Controls - X-User: Header entfernt, Server verlässt sich auf JWT
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
/// Zentrale Sanitize-Funktion für Dateinamen.
|
||||
/// Verhindert Path-Traversal (../), Null-Bytes und andere gefährliche Zeichen.
|
||||
String sanitizeDateiname(String name) {
|
||||
// 1. Extrahiere nur den Dateinamen (keine Pfad-Komponenten)
|
||||
var safe = name.split('/').last.split('\\').last;
|
||||
|
||||
// 2. Entferne NULL-Bytes und andere gefährliche Steuerzeichen
|
||||
safe = safe.replaceAll(RegExp(r'[\x00-\x1F\x7F]'), '');
|
||||
|
||||
// 3. Entferne alles außer Wort-Zeichen, Leerzeichen und Bindestrichen
|
||||
safe = safe.replaceAll(RegExp(r'[^\w\s.-]'), '');
|
||||
|
||||
// 4. Entferne führende Punkte (versteckte Dateien)
|
||||
safe = safe.replaceAll(RegExp(r'^\.+'), '');
|
||||
|
||||
// 5. Trimmen und Default-Name falls leer
|
||||
safe = safe.trim();
|
||||
if (safe.isEmpty) safe = 'unknown';
|
||||
|
||||
// 6. Auf sinnvolle Länge kürzen (255 Zeichen ist typisches Dateisystem-Limit)
|
||||
if (safe.length > 200) safe = safe.substring(0, 200);
|
||||
|
||||
return safe;
|
||||
}
|
||||
Reference in New Issue
Block a user