Warum sind fremde Bibliotheken ein Risiko?
Eine Abhängigkeit ist eine fremde Bibliothek, die Ihr Programm nutzt. Das ist wichtig, weil der größte Teil des Codes in einem Projekt nicht von Ihnen stammt und seine Fehler Ihre Fehler werden.
Eine alte Version mit bekannter Lücke reicht aus. Dazu kommen Geheimnisse, die jemand im Code vergessen hat. Beides lässt sich prüfen, bevor es Schaden anrichtet.
Am Ende dieser Lektion
Notiz
Ich kann die Risiken der Bibliotheken eines Projekts beurteilen und Geheimnisse im Code erkennen.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Abhängigkeit | eine fremde Bibliothek, die ein Projekt braucht; auf Englisch Dependency |
| Version | der Stand einer Bibliothek, etwa 2.19.0 |
| Festlegen | genau eine Version vorschreiben, mit ==; auf Englisch Pinning |
| Bekannte Lücke | ein veröffentlichter Fehler einer Version, den Angreifende nutzen können |
| Geheimnis | ein Passwort oder Schlüssel, der nicht im Code stehen darf |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine festgelegte Version ist prüfbar
Eine Liste der Abhängigkeiten nennt Name und Version. Steht dort requests==2.19.0, ist die Version festgelegt. Steht nur requests, bekommt jede Installation, was gerade neu ist.
Nur eine festgelegte Version können Sie gegen eine Liste bekannter Lücken halten. Ohne Festlegung wissen Sie nicht, was läuft.
Beispiel: drei Zeilen einer Liste geprüft
| Zeile | Festgelegt? | Bekannte Lücke? | Urteil |
|---|---|---|---|
| flask==3.0.3 | Ja | Nein | in Ordnung |
| requests==2.19.0 | Ja | Ja, in dieser Version | aktualisieren |
| pillow | Nein | unbekannt | Version festlegen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Name und Version aus einer Zeile lesen
zeile = "requests==2.19.0"
teile = zeile.split("==")
# Ändern Sie die Zeile in "pillow" und führen Sie den Block aus.
if len(teile) == 2:
print("Name:", teile[0], "Version:", teile[1])
else:
print("nicht festgelegt:", zeile)
Ein Geheimnis gehört nicht in den Code
Ein Geheimnis ist ein Passwort oder ein Schlüssel. Es im Code zu lassen ist gefährlich: Der Code wandert in Archive, Kopien und alte Versionen. Ein später gelöschtes Geheimnis bleibt dort stehen.
Der sichere Ort ist eine Einstellung außerhalb des Codes, etwa eine Umgebungsvariable oder ein Geheimnisspeicher. Ein offengelegtes Geheimnis wird sofort erneuert.
Eine verdächtige Zeile erkennen
def sieht_aus_wie_geheimnis(zeile):
klein = zeile.lower()
if "passwort" in klein or "schluessel" in klein:
return "=" in zeile and '"' in zeile
return False
# Alle Zeilen sind erfunden. Probieren Sie eigene.
print(sieht_aus_wie_geheimnis('passwort = "abc123"'))
print(sieht_aus_wie_geheimnis("passwort = lies_umgebung()"))
Die Anwendung des Labs ansehen
Das Lab ist eine Anwendung, die Geheimnisse absichtlich schlecht versteckt. Sie suchen sie später selbst. Die zwei Runs fragen nur, ob die Anwendung läuft: Jede Anwendung hat solche Seiten, und jede ist Angriffsfläche.
Die erste Ausgabe ist ein kurzer Bericht, die zweite der Statuscode 200.
Die eine Regel
Warnung
Dieses Lab ist eine Anwendung, die absichtlich unsicher ist. Sehen Sie nur Ihre eigene, private Kopie an und nichts sonst. Sie hat keine Verbindung ins Internet.
Ist die Anwendung gesund?
curl -s -w "\n" http://wrongsecrets:8080/actuator/healthHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der Statuscode derselben Seite
curl -s -o /dev/null -w "%{http_code}\n" http://wrongsecrets:8080/actuator/healthHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, ein Geheimnis sei weg, wenn man es aus der Datei löscht. Das stimmt nicht: Alte Versionen und Kopien enthalten es weiter. Erneuern Sie das Geheimnis, und legen Sie das neue außerhalb des Codes ab.