Sobald deine App im Internet steht, finden Fremde sie — auch automatische Bots. Ein paar einfache Gewohnheiten verhindern die meisten echten Probleme. (Hier geht es um Verteidigung, nicht um Angriffsanleitungen.)
Die Idee
Zwei Bilder: Ein Schlüssel gehört in einen Safe, nicht auf einen Zettel an der Tür. Und eine Tür sollte nur die reinlassen, die auch rein dürfen — und zwar nur in die Räume, die sie brauchen.
Bei Instagram heißt das konkret: Nur du kannst dich als du einloggen (der Schlüssel), und nur du darfst deine eigenen Beiträge löschen (die richtige Tür). Fremde dürfen deinen Feed sehen, aber nicht in deinem Namen posten.
So funktioniert es
Die wichtigsten Gewohnheiten:
- Geheimnisse nicht in den Code. Passwörter und API-Schlüssel gehören in Umgebungsvariablen oder einen Secret-Manager — nie in Git.
- Authentifizierung (AuthN): Wer bist du? (einloggen)
- Autorisierung (AuthZ): Was darfst du? (Rechte prüfen)
- HTTPS überall. Verschlüsselte Verbindung.
- Least Privilege: Jeder Teil bekommt nur die Rechte, die er wirklich braucht.
So hält man Geheimnisse aus dem Code: eine .env-Datei lokal, in Git ignoriert.
# .env (NICHT committen)
DATABASE_URL=postgres://app:supergeheim@localhost/appdb
SESSION_SECRET=langer-zufallswert
# .gitignore
.env
AuthN und AuthZ am Beispiel „Beitrag löschen“: Erst prüft der Server, ob überhaupt jemand eingeloggt ist (sonst 401). Dann prüft er, ob dieser Jemand der Autor ist (sonst 403).
So steuerst du es
AuthN und AuthZ sind getrennt und gehören beide auf den Server: erst Identität feststellen, dann Rechte prüfen. Niemals der Eingabe vertrauen — alles Ankommende validieren und bereinigen, bevor du es speicherst oder verwendest. Das verhindert ganze Fehlerklassen.
Weiter: Abhängigkeiten aktuell halten (alte Versionen haben bekannte Lücken), so wenig wie möglich öffentlich exponieren, und Least Privilege bei Cloud-Rechten, damit ein kompromittierter Teil wenig Schaden anrichtet.
So sagst du es dem Agenten:
„Lege keine Geheimnisse in den Code oder in Git. Nutze eine
.envund trage sie in.gitignoreein.“„Prüfe serverseitig:
401, wenn niemand eingeloggt ist,403, wenn die Nutzerin nicht der Autor ist.“„Erzwinge HTTPS und validiere jede Eingabe, bevor sie in die Datenbank geht.“
Typische Fehler: .env oder Schlüssel versehentlich committen; Regeln nur im Frontend prüfen; oder einem Dienst mehr Cloud-Rechte geben, als er braucht.
Kurz-Check
- Wo gehören Passwörter und API-Schlüssel hin — und wo nicht?
- Was ist der Unterschied zwischen Authentifizierung und Autorisierung?
- Welcher Statuscode passt, wenn eine Fremde einen Beitrag löschen will?
Antworten anzeigen
- In Umgebungsvariablen / einen Secret-Manager (z. B.
.env, in.gitignore) — nie in den Code oder nach Git. - AuthN klärt „wer bist du?“, AuthZ klärt „was darfst du?“.
403(verboten) — sie ist eingeloggt, aber nicht der Autor. (Ist niemand eingeloggt:401.)