Was ist ein Code-Review auf Sicherheit?
Ein Sicherheits-Review ist das gezielte Lesen von Code, um Fehler zu finden, bevor sie ausgeliefert werden. Das ist wichtig, weil ein zweiter Blick Fehler sieht, die der Autor selbst übersieht.
Niemand liest jede Zeile mit gleicher Sorgfalt. Eine Checkliste und der Blick auf die geänderten Zeilen machen das Lesen schnell und verlässlich.
Am Ende dieser Lektion
Notiz
Ich kann mit einer Checkliste Code auf Sicherheitsfehler durchsehen und riskante Zeilen markieren.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Code-Review | das Durchsehen fremden Codes vor der Übernahme |
| Diff | die Liste der Zeilen, die eine Änderung hinzufügt oder entfernt |
| Checkliste | feste Fragen, die bei jedem Review gestellt werden |
| Eingabe | Daten, die von außen in das Programm kommen |
| Senke | die Stelle, an der ein Wert etwas bewirkt, etwa eine Abfrage |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Folgen Sie jeder Eingabe bis zur Senke
Ein Review beginnt bei den Eingaben und folgt jedem Wert bis zur Senke. Unterwegs fragen Sie: Wird er geprüft? Wird er als Parameter übergeben? Wird er maskiert, bevor er angezeigt wird?
Fehlt eine Antwort, ist die Zeile verdächtig. Das Lesen nach Wegen ist schneller als das Lesen von oben nach unten.
Beispiel: eine Checkliste für ein Review
| Frage | Warnzeichen im Code |
|---|---|
| Kommt ein Wert in eine Abfrage? | Text wird mit + oder f-String verbunden |
| Zeigt der Fehlerfall Einzelheiten? | Die Meldung der Datenbank geht an den Besucher |
| Steht ein Geheimnis im Code? | passwort = "..." im Text |
| Ist die Rechteprüfung vorhanden? | Eine Aktion ohne Frage nach der Rolle |
| Wird zu viel geöffnet? | Lauschen auf allen Adressen, Rechte für alle |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Diff lesen: nur neue Zeilen zählen
diff = [
"--- alt.py",
"+++ neu.py",
"- sql = 'SELECT * FROM t WHERE id = ?'",
"+ sql = 'SELECT * FROM t WHERE id = ' + wert",
" return db.execute(sql)",
]
# Zeilen mit + sind neu. Ändern Sie das Wort, nach dem gesucht wird.
nummer = 1
for zeile in diff:
if zeile.startswith("+") and not zeile.startswith("+++"):
if "+ wert" in zeile:
print("Zeile", nummer, "ist verdächtig")
nummer = nummer + 1
Ein Review am Shop des Labs
Der Shop des Labs ist ein kurzes Programm, an dem Sie die Checkliste üben. Die drei Runs zählen, wie oft ein Warnzeichen im Programm steht: Fehlertext an Besucher, Lauschen auf allen Adressen und der Filter auf öffentliche Artikel.
Sie ändern nichts. Jede Zahl ist ein Anlass zu fragen, ob die Stelle gewollt ist.
Die eine Regel
Warnung
Dieses Lab ist ein Shop, der absichtlich unsicher ist. Sehen Sie nur Ihre eigene, private Kopie an und nichts sonst. Sie hat keine Verbindung ins Internet.
Geht ein Fehlertext an den Besucher?
docker exec app grep -c "str(error)" /tmp/app/app.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Auf welchen Adressen lauscht der Shop?
docker exec app grep -c "0.0.0.0" /tmp/app/app.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Filtert die Suche auf öffentliche Artikel?
docker exec app grep -c "public = 1" /tmp/app/app.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Was die drei Zahlen sagen
Jeder Run gibt 1 aus. Der erste Treffer ist ein Fehlertext, der an den Besucher geht: ein Fund für den Bericht. Der zweite ist in einem Container üblich, aber Sie prüfen, ob er gewollt ist. Der dritte ist ein Filter, der gut ist.
Ein Review nennt auch, was gut ist. So wissen die Autorinnen und Autoren, was sie behalten sollen.
Ein häufiger Fehler
Warnung
Viele glauben, ein Review suche nur Fehler im geänderten Text. Das stimmt nicht. Eine kleine Änderung kann einen Schutz an ganz anderer Stelle aushebeln. Fragen Sie bei jeder Zeile, was sie für die Wege der Eingaben bedeutet.