Einführung
Du betreust denselben Bildimport in einer frischen Umgebung. Die Zielrichtlinie akzeptiert jede URL, und der HTTP-Client folgt Weiterleitungen. Begrenze die Funktion auf einen festen Katalogendpunkt und erhalte dabei Bilder sowie den legitimen Bestandsverbraucher der Anwendung.
Du führst eine kleine, erklärte Python-Änderung durch. Workstation sendet Clientanfragen; App Policy bearbeitet die von App tatsächlich geladene Datei. Python-Vorkenntnisse sind nicht nötig. Die vorbereiteten Daten nutzen kontrollierte Namen und isolierte Netze; dies ist eine enge Endpunktrichtlinie, keine universelle SSRF-Abwehr.
Nur das genehmigte Ziel zulassen
In diesem Schritt beschränkst du die aktive Richtlinie auf den genehmigten Endpunkt. Eine Freigabeliste nennt genau die erlaubten Eingaben; andere werden abgelehnt. Die Geschäftsregel lautet:
Wähle zu Beginn dieses Schritts den Tab Workstation in der Lab-Oberfläche aus.
| Schema | Hostname | Port | Zweck |
|---|---|---|---|
http |
catalog.test |
8000 |
Produktbilder |
Wechsle zum Tab Workstation. Untersuche eine geparste URL. Parsing zerlegt die Adresse in Felder und entscheidet nicht über deren Sicherheit:
Wechsle zum Tab Workstation, bevor du den folgenden Befehl ausführst.
python3 imagectl.py parse http://catalog.test:8000/leaf.png
Erwarte scheme: http, hostname: catalog.test und port: 8000. Ohne expliziten HTTP-Port wird 80 verwendet, der nicht genehmigt ist. Teste das momentan unsichere Verhalten:
python3 imagectl.py probe http://internal.test:8000/status
probe führt denselben echten ausgehenden Abruf wie ein Import aus, speichert jedoch keinen Importdatensatz. Vor der Reparatur erwartest du HTTP 200.
Wechsle zum Tab App Policy, der das Host-Arbeitsverzeichnis mit policy.py öffnet. App bindet dieses Verzeichnis ein und lädt den Helfer bei jeder Anfrage neu. Öffne die Datei mit dem Terminaleditor:
Wechsle zum Tab App Policy, bevor du den folgenden Befehl ausführst.
nano policy.py
Behalte zunächst FOLLOW_REDIRECTS = True. Ersetze ausschließlich return True durch:
return (p.scheme, p.hostname, p.port or 80) == ("http", "catalog.test", 8000)
Behalte die vier führenden Leerzeichen: Python ordnet Anweisungen durch Einrückung einer Funktion zu. p = urlsplit(url) liefert die Felder. Klammern fassen drei Werte zu einem Tupel zusammen; == vergleicht das gesamte Tupel. Der Ausdruck liefert den booleschen Wert True oder False. p.port or 80 ergänzt den normalen HTTP-Port, falls keiner angegeben wurde. Text in Anführungszeichen ist eine Zeichenfolge; 8000 ist eine Zahl.
Speichere mit Ctrl+O, drücke Enter und beende mit Ctrl+X. Wechsle zurück zum Tab Workstation. Führe aus:
Wechsle zum Tab Workstation, bevor du den folgenden Befehl ausführst.
python3 imagectl.py probe http://catalog.test:8000/leaf.png
python3 imagectl.py probe http://internal.test:8000/status
Das Bild muss HTTP 200 liefern, Internal dagegen HTTP 403 mit destination denied. 502 bedeutet einen fehlgeschlagenen Abruf, oft wegen eines Editierfehlers; das ist keine gültige Ablehnung. Wechsle zum Tab App Policy, öffne nano policy.py erneut, korrigiere Schreibweise und Einrückung und speichere. Wechsle vor dem erneuten Test zurück zu Workstation. Kein Neustart ist nötig: Jede Anfrage lädt die gespeicherte Richtlinie.
Weiterleitungen stoppen und beide Seiten prüfen
In diesem Schritt schließt du den verbleibenden Weiterleitungspfad und prüfst den normalen Betrieb. Wechsle zum Tab Workstation. Teste nach der Zielreparatur die Katalogweiterleitung:
Wähle zu Beginn dieses Schritts den Tab Workstation in der Lab-Oberfläche aus.
Wechsle zum Tab Workstation, bevor du den folgenden Befehl ausführst.
python3 imagectl.py probe http://catalog.test:8000/redirect
Sie liefert weiterhin Internals JSON, weil der HTTP-Client nach der ersten Prüfung der Weiterleitung folgt. Der Shop akzeptiert nur direkte Bild-URLs und lehnt daher sämtliche Weiterleitungen ab.
Wechsle zum Tab App Policy. Öffne dieselbe aktive Datei:
Wechsle zum Tab App Policy, bevor du den folgenden Befehl ausführst.
nano policy.py
Ändere FOLLOW_REDIRECTS = True in FOLLOW_REDIRECTS = False. Die Variable wählt den vorbereiteten HTTP-Handler, der Weiterleitungen ablehnt. Behalte die Zielprüfung. Speichere mit Ctrl+O, Enter und beende mit Ctrl+X.
Wechsle zurück zum Tab Workstation. Teste die verbotenen Fälle einzeln:
Wechsle zum Tab Workstation, bevor du den folgenden Befehl ausführst.
python3 imagectl.py probe http://catalog.test:8000/redirect
python3 imagectl.py probe https://catalog.test:8000/leaf.png
python3 imagectl.py probe http://catalog.test:8001/leaf.png
Erwarte für die Weiterleitung HTTP 422 mit redirect denied, für beide falschen Endpunkte HTTP 403. https ist ein anderes Protokoll; auch nur ein anderer Port ändert den Endpunkt. Verbindungsfehler oder 502 sind nicht die gewünschte Ablehnung.
Importiere abschließend das legitime Bild und prüfe den unabhängigen Bestandsverbraucher:
python3 imagectl.py fetch http://catalog.test:8000/leaf.png normal
python3 imagectl.py direct http://app.test:8000/health
Beide müssen HTTP 200 liefern; die Gesundheitsantwort muss inventory: synthetic-ready enthalten. Wechsle zum Tab Image Importer und aktualisiere die Seite, um das grüne Bild zu sehen. Alles zu blockieren, Internal zu stoppen oder eine unbenutzte Kopie zu bearbeiten genügt nicht. Falls das Bild scheitert, wechsle zum Tab App Policy, stelle das genehmigte Tupel wieder her und wechsle zurück zu Workstation, um den genehmigten Import zu wiederholen. Erhalte bei Gesundheitsfehlern Apps interne Verbindung. Die Reparatur kontrolliert feste Ziele und Weiterleitungen dieser Funktion, ohne dem legitimen Bestandsverbraucher den Netzwerkzugriff zu nehmen.

Für zwei künftige Endpunkte kann Python ein Tupel mit in gegen eine Menge prüfen, etwa (p.scheme, p.hostname, p.port or 80) in {("http", "one.test", 8000), ("http", "two.test", 8001)}. Geschweifte Klammern enthalten zwei vollständige Alternativen. So sind nur die genannten Kombinationen erlaubt, keine gekreuzten Host-/Port-Paare. Die nächste Challenge liefert ihre eigene Tabelle.
Zusammenfassung
Du hast vollständige Zieltupel verglichen, Weiterleitungen deaktiviert und verbotene Anfragen sowie erhaltene Bild- und Bestandsfunktionen geprüft. Diese Kontrollen gelten für feste, kontrollierte Dienstidentitäten.



