Ein Schlüssel im falschen Ordner
Eine Entwicklerin lädt ihren Code in ein Repository, damit das Team ihn sieht. In einer Datei steht der Schlüssel zum Zahlungsdienst.
Nach wenigen Stunden wird er von Fremden benutzt. Die Firma zahlt für Leistungen, die sie nie bestellt hat.
Diese Lektion zeigt, wie man das verhindert. Alle Schlüssel hier sind erfunden und überall ungültig.
Am Ende dieser Lektion
Notiz
Ich kann Geheimnisse aus dem Code heraushalten und Eingaben prüfen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Geheimnis | Ein Wert, den nur berechtigte Personen kennen dürfen | Passwort, API-Schlüssel |
| API-Schlüssel | Ein Code, mit dem ein Programm einen Dienst benutzen darf | |
| Umgebungsvariable | Ein Wert, den das System dem Programm von außen gibt | |
| Repository | Der Ort, an dem der Code und seine Geschichte liegen | |
| Eingabeprüfung | Eingaben kontrollieren, bevor man mit ihnen arbeitet (englisch: validation) |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Geheimnisse gehören nicht in den Code
Code wird kopiert, geteilt und hochgeladen. Er liegt in Repositories und auf vielen Laptops.
Steht ein Passwort im Code, kennt es jede Person, die den Code sieht. Auch später noch: Die Geschichte eines Repositories bewahrt alte Fassungen auf.
Deshalb steht im Code nur, wo das Geheimnis zu finden ist, nie das Geheimnis selbst.
Probieren Sie es aus: Code nach Geheimnissen durchsuchen
# Eine kleine Konfigurationsdatei, wie sie versehentlich im Code landen kann
echo 'SHOP_NAME = "Beispiel-Laden"' > konfig.py
echo 'ZAHLUNG_SCHLUESSEL = "demo_ERFUNDEN_123456"' >> konfig.py
echo 'DATENBANK_PASSWORT = "ErfundenesPasswort!"' >> konfig.py
# Suchen Sie nach Zeilen mit Wörtern, die auf ein Geheimnis hindeuten
grep -n -i -E "schluessel|passwort|token" konfig.py
# Suchen Sie jetzt auch nach "secret".
Umgebungsvariablen
Eine Umgebungsvariable ist ein Wert, den das System dem Programm beim Start mitgibt.
Auf Ihrem Laptop setzen Sie sie selbst. Auf dem Server setzt sie die Person, die ihn betreut, oder ein Werkzeug für Geheimnisse.
Der Code liest nur den Namen. Der Wert steht nie im Repository.
Ausprobieren: ein Schlüssel aus der Umgebung
# Der Wert kommt von außen und steht nicht im Code
export ZAHLUNG_SCHLUESSEL="demo_ERFUNDEN_123456"
python3 -c "import os; print('Schlüssel gesetzt:', 'ZAHLUNG_SCHLUESSEL' in os.environ)"
python3 -c "import os; print('Länge:', len(os.environ['ZAHLUNG_SCHLUESSEL']))"
# Entfernen Sie die export-Zeile. Was meldet das Programm nun?
Ein häufiger Fehler
Warnung
Viele denken, ein privates Repository sei sicher genug für Passwörter. Es wird aber oft geteilt, kopiert oder später geöffnet. Halten Sie Geheimnisse aus dem Code heraus, denn ein gelesenes Geheimnis lässt sich nicht zurückholen. Ist eines doch hochgeladen, tauschen Sie es sofort aus und melden Sie es.
Eingaben prüfen
Alles, was von außen kommt, kann falsch sein. Ein Tippfehler, ein leeres Feld, ein Minuszeichen.
Prüfen Sie Eingaben, bevor Sie mit ihnen arbeiten. Erlauben Sie, was Sie erwarten, und lehnen Sie den Rest ab.
Beispiel: Eine Bestellmenge ist eine ganze Zahl von 1 bis 100. Alles andere wird abgelehnt.
Ein Beispiel: Mengen in einer Bestellung
| Eingabe | Gültig? | Grund |
|---|---|---|
| 5 | ja | Ganze Zahl im Bereich |
| 0 | nein | Kleiner als 1 |
| -3 | nein | Keine reine Ziffernfolge |
| fuenf | nein | Kein Zahlenwert |
| 500 | nein | Größer als 100 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Im Berufsalltag
Tipp
Viele Teams nutzen Werkzeuge, die vor jedem Hochladen nach Geheimnissen suchen. Bleibt trotzdem eines im Code, melden Sie es sofort, auch wenn es Ihr eigener Fehler war. Ein schneller Hinweis ist besser als ein verschwiegener Fehler.