Problem
Fehler entstehen nicht nur durch falsche Benutzereingaben. Auch Datenbanken, externe Dienste, Dateisysteme oder Netzwerkverbindungen können fehlschlagen. Wenn diese Fehler nicht kontrolliert behandelt werden, kann eine Anwendung:- interne Details preisgeben
- falsche Antworten liefern
- in einen unsicheren Zustand geraten
- abstürzen
- Zugriff erlauben, obwohl eine Sicherheitsprüfung fehlgeschlagen ist
Typische Fehlerstellen
Fehler können an vielen Stellen entstehen:- Login
- Passwort-Reset
- Formularvalidierung
- API-Aufrufe
- Datenbankabfragen
- Dateioperationen
- Netzwerk-Timeouts
- externe Dienste
- Rollen- und Rechteprüfungen
Fehlerstellen identifizieren
Beim Analysieren einer einfachen Anwendung suchst du nach allen Stellen, an denen etwas fehlschlagen kann.| Bereich | Worauf achten? |
|---|---|
| Eingaben | Formulare, URL-Parameter, JSON-Bodies und Uploads |
| Externe Abhängigkeiten | API-Aufrufe, Datenbankzugriffe und externe Services |
| Dateisystem | Uploads, Downloads, Pfade und Berechtigungen |
| Authentifizierung | Login, Logout, Sessionprüfung und Passwort-Reset |
| Autorisierung | Rollenprüfung und Zugriff auf geschützte Ressourcen |
| Implementierung | try/catch, throw, Error Middleware und Logging-Aufrufe |
JavaScript und TypeScript
JavaScript verwendettry, catch, finally, throw und Error-Objekte.
try: Code, der fehlschlagen kann.catch: Reaktion auf den Fehler.finally: Code, der immer ausgeführt wird, z. B. Aufräumen oder Ladezustand beenden.throw: Erzeugt oder leitet einen Fehler weiter.Error: Objekt mit Fehlermeldung und oft auch Stack Trace.
catch nicht blind davon ausgehen, dass der Fehler ein Error ist.
Recoverable und unrecoverable errors
Ein recoverable error ist ein Fehler, von dem sich die Anwendung erholen kann. Beispiele:- Netzwerk-Timeout bei einem API-Aufruf
- ungültige Benutzereingabe
- temporär nicht erreichbarer externer Dienst
- abgelaufene Session, die durch erneutes Login behoben werden kann
- Benutzer zur Korrektur auffordern
- Retry mit Begrenzung ausführen
- Fallback anzeigen
- Vorgang abbrechen, ohne die Anwendung zu beenden
- fehlende zentrale Konfiguration
- korrupter Anwendungszustand
- nicht initialisierte Sicherheitskomponente
- Datenbankmigration fehlt und Datenmodell passt nicht mehr
- Vorgang stoppen
- sicheren Zustand herstellen
- Fehler mit hoher Priorität loggen
- Zugriff verweigern statt unsicher weiterarbeiten
Authentifizierungs-Bypass
Ein Authentifizierungs-Bypass entsteht, wenn ein Angreifer ohne gültige Anmeldung Zugriff erhält. Fehlerbehandlung kann solche Schwachstellen begünstigen oder verhindern. Gefährliche Muster:- Fail open: Bei einem Fehler wird Zugriff erlaubt.
- Unterschiedliche Login-Meldungen zeigen, ob ein Benutzer existiert.
- Fehler im Session-Check werden ignoriert.
- Passwort-Reset verrät, ob eine E-Mail registriert ist.
- Nach einem API-Fehler wird eine Standardrolle wie
adminoderusergesetzt.
Lösung
Eine sichere Fehlerbehandlung sollte:- Fehler kontrolliert abfangen
- Benutzern verständliche Meldungen anzeigen
- technische Details nur intern loggen
- Security Checks standardmässig verweigern
- recoverable und unrecoverable errors unterscheiden
- Fehlerfälle testen