0%

Kapitel 1

Was schiefgehen kann

Willkommen im Kurs

Hallo, ich bin Erik. Ich schreibe und pflege diesen Kurs, zusammen mit dem Rest von Python Land.

In with Python hast du einen Leselisten-Dienst mit einer Anmeldung, einem und Tokens gebaut, die jeden Schreibzugriff schützen. Er funktioniert, und seine Tests laufen durch. Jener Kurs hat gefragt, ob die richtige Anfrage die richtige Antwort bekommt. Dieser Kurs fragt, was jemand den Dienst tun lassen könnte, was du als sein Eigentümer nie beabsichtigt hast. Du findest die Schwachstellen selbst und schließt sie eine nach der anderen.

Was du absicherst

KapitelWas du schließt
1noch nichts: Du benennst, was gefährdet ist, und beweist eine Schwachstelle mit einem Test
2 und 3Passwörter, die eine Kopie der Daten verrät
4, die nie enden
5Tokens, die im stehen
6einen Leser, der die Bücher eines anderen Lesers ändert, und endlose Anmeldeversuche
7Anfragedaten, denen zu früh vertraut wird
8 und 9Anfragen, die eine andere Website im Browser eines Benutzers startet
10einfaches HTTP
11das Abschlussprojekt: elf Schwachstellen und kein Kapitel, das dir sagt, wo du suchen sollst

Die ändert sich nie. Du führst einen Angriff aus und siehst zu, wie er funktioniert. Du schreibst einen Test, der den Angriff ausführt und fehlschlägt. Du korrigierst den Code, und der Test läuft durch.

Eine Regel

Greif nur an, was dir gehört.

Jeder Angriff in diesem Kurs zielt auf handle() in deinem eigenen Projekt, entweder im Speicher oder auf 127.0.0.1, der , über die dein eigener Rechner mit sich selbst spricht. Das für diesen Kurs geschriebene Hilfsprogramm pl_sec.py nimmt keinen Hostnamen entgegen, also kann es auf nichts anderes gerichtet werden.

Dieselben Techniken funktionieren gegen echte Dienste. Sie gegen einen Dienst einzusetzen, der nicht dir gehört, ohne die Erlaubnis seines Eigentümers, ist an den meisten Orten gesetzwidrig und widerspricht dem Sinn dieses Kurses.

Was davon darfst du mit dem angreifen, was dieser Kurs lehrt?

Was die Website erreichen kann und was nicht

Die Sandboxes auf Python Land haben keine Route ins öffentliche Internet. Keine Lektion kontaktiert eine echte Website.

Die Website hat auch keinen Browser. Das wird ab Kapitel 8 wichtig: Welche Cookies mit einer Anfrage mitgehen und welche Seite welche Antwort lesen darf, entscheidet ein Browser. Deshalb schreibst du in den Kapiteln 8 und 9 selbst ein kleines Modell eines Browsers, eine Regel nach der anderen, als einfache Python-. Das Modell folgt den veröffentlichten Standards. Es bleibt trotzdem ein Modell, und die Lektionen sagen, wo es einfacher ist als ein echter Browser.

In den Kapiteln 8 und 9 geht es darum, was ein Browser mit Cookies und anderen Websites macht. Was spielt hier den Browser?

Was im Projekt ist

  • reading_server.py ist der Server, wie HTTP with Python ihn hinterlassen hat, in einer geprüften Kopie, damit alle mit demselben Code beginnen.

  • http_adapter.py ist die Datei, die du kennst, plus eine Methode, do_OPTIONS, die Kapitel 9 braucht. wire.py ist unverändert.

  • In tests/test_attacks.py kommen deine Angriffstests, und tests/helpers.py enthält kleine Funktionen, die diese Tests verwenden.

  • SECURITY.md ist die der Schwachstellen, die du findest. Sie beginnt mit vier leeren Zeilen.

  • pl_sec.py ist ein Hilfsprogramm, das für diesen Kurs geschrieben wurde. Es spielt die andere Seite: einen Client, einen Dieb, einen Angreifer.

Dein Client, reading_client.py, wird nicht übernommen. Kapitel 5 ändert die Tokens, die er senden müsste, und in diesem Kurs geht es um den Server.

Was dieser Kurs von dir braucht

Du brauchst HTTP with Python:

  • handle(request, state) und die für Anfrage und Antwort, mit denen es arbeitet;

  • Cookies und eine Session, die auf dem Server gehalten wird;

  • Basic-Zugangsdaten bei der Anmeldung und Bearer-Tokens bei Schreibzugriffen, und wann ein Server mit 401 antwortet und wann mit 403;

  • einen -Digest aus hashlib, und secrets.token_urlsafe;

  • Tests, die den Handler direkt aufrufen und mit python -m pytest -q laufen.

Python Fundamentals II wird empfohlen, ist aber keine Voraussetzung. http_adapter.py enthält eine Klasse. Du liest sie einmal, und keine Übung verlangt, dass du selbst eine schreibst.

Lerne Monty kennen

Monty ist der Lernbegleiter von Python Land und steht dir neben jeder Lektion zur Verfügung. Bitte um eine weitere Erklärung, um einen Hinweis, der dir nicht die Lösung verrät, oder um Hilfe beim Lesen einer Fehlermeldung.

Wenn du angemeldet bist, enthält dein kostenloses Konto 5 Monty-Hilfen pro Tag, gemeinsam für alle Kurse. Eine gute erste Frage an dieser Stelle:

Was hat mein Leselisten-Server geprüft, bevor er eine Anfrage ein Buch ändern ließ, in einfachen Worten?

Die nächste Lektion betrachtet diesen Server mit den Augen von jemandem, der ihn missbrauchen will.

Mit Guided erhältst du bis zu 50 Monty-Hilfen pro Tag. Fragen, Hinweise, Fehlererklärungen, zusätzliche Übungen und Code-Feedback teilen sich dasselbe Tageslimit. Der Zähler zeigt, wie viel noch übrig ist und wann das Limit erneuert wird. Jede Lektion und jeder normale erneute Übungsversuch bleibt kostenlos.