Konzepterklärung
Sicherheit beginnt lange bevor Sie eine große Web-App entwickeln. Sie beginnt, wenn Ihr Code zum ersten Mal einen Dateinamen liest, einen Benutzerwert akzeptiert oder entscheidet, ob er einer Eingabe vertrauen soll. In Anfängerprojekten ist das Gefährliche nicht die Komplexität – es ist falsches Vertrauen. In dieser Lektion arbeiten Sie mit einem kleinen Skript, das eine Datei aus einem sicheren Ordner liest. Ziel ist es nicht, Sicherheitsjargon auswendig zu lernen. Ziel ist es, eine gesunde Gewohnheit zu entwickeln: Vertrauen Sie einem Pfad niemals nur, weil er harmlos aussieht. Sie werden sehen, wie ein Skript sich selbst schützen kann, indem es prüft, wohin ein Pfad wirklich zeigt, bevor es etwas öffnet. Diese Denkweise wird Ihnen später bei Uploads, APIs, Formularen und Kommandozeilen-Tools helfen. Am Ende dieser Lektion sollten Sie in der Lage sein: • zu erklären, warum `eval()` für nicht vertrauenswürdige Eingaben unsicher ist, • in einfachen Worten zu beschreiben, was Path Traversal bedeutet, • ein Dateilese-Skript in einem festen Ordner zu halten, anstatt es überall im System herumwandern zu lassen. Warum das wichtig ist: Viel Anfänger-Code funktioniert auf "Happy Paths" einwandfrei, bricht aber in dem Moment zusammen, in dem die Eingabe unsauber oder feindselig wird. Zuverlässiger Code geht davon aus, dass schlechte Eingaben irgendwann eintreffen werden.
Wo der Code hingehört
- Definieren Sie Farb- und Positionsvariablen oben.
- Erstellen Sie die Logik für das Zeichnen oder Platzieren von Formen in der Mitte.
- Rendern Sie die Ausgabe (Druck, Canvas, SVG oder gestylter Block) am Ende.
Befehlsreferenz
- Behandeln Sie jeden Pfad als nicht vertrauenswürdig, bis Sie überprüft haben, wohin er auf der Festplatte führt.
- Verwenden Sie `Path.resolve()`, bevor Sie eine Datei lesen, um Fluchtversuche wie `../secret.txt` zu erkennen.
- Verwenden Sie `eval()` niemals für benutzergesteuerten Text; Daten parsen und Code ausführen sind nicht dasselbe.
- Halten Sie Experimente in einem dedizierten Ordner, damit Fehler eingedämmt bleiben.
Schritt-für-Schritt-Anleitung
- Führen Sie das Skript aus und bestätigen Sie, dass es den Inhalt von `notes.txt` aus `lesson_workspace` ausgibt.
- Ändern Sie den Dateinamen zu etwas Fehlendem, führen Sie es erneut aus und lesen Sie die `FileNotFoundError` sorgfältig.
- Probieren Sie einen gefährlichen Wert wie `../outside.txt` aus und sagen Sie voraus, was passieren sollte, bevor Sie es ausführen.
- Fügen Sie eine zweite sichere Datei in `lesson_workspace` hinzu und bestätigen Sie, dass die Funktion sie weiterhin normal lesen kann.
- Schreiben Sie einen Satz, der erklärt, warum das Überprüfen des aufgelösten Pfads sicherer ist, als dem rohen Dateinamen zu vertrauen.
Übungsaufgaben
- Erklären Sie in eigenen Worten den Unterschied zwischen dem Lesen einer sicheren lokalen Datei und dem Ausführen von beliebigem Text als Code.
- Vergleichen Sie `Path` und `os.path` hinsichtlich der Lesbarkeit und schreiben Sie, welchen Stil Sie für Anfänger-Skripte bevorzugen.
- Suchen Sie online ein Beispiel für einen Path Traversal Bug oder eine unsichere `eval()`-Nutzung und fassen Sie die Lektion in drei einfachen Sätzen zusammen.
Coding-Challenges
- Aktualisieren Sie die Funktion so, dass sie nur `.txt`-Dateien zulässt und alles andere mit einer klaren Fehlermeldung ablehnt.
- Geben Sie sowohl den Vorschauteil als auch die Dateigröße zurück, während Sie die Sicherheitsüberprüfungen an einem Ort belassen.
Kleine Übungsaufgaben
- Erstellen Sie `lesson_workspace/` in `.gitignore`, damit Ihre Übungsdateien das Projekt nicht überladen.
- Notieren Sie sich eine Regel, die Sie sich merken möchten: Vertrauen Sie niemals rohen Pfaden aus Eingaben.
- Löschen Sie alle alten Experimente, bei denen Sie `eval()` verwendet haben, nur weil es praktisch erschien.
Häufiger Fehler
Mixing x and y axes or using wrong coordinate origin causes shapes to appear in unexpected places.
Mini-Challenge aus der Praxis
Draw one square, one triangle, and one circle, then move X marker 2 steps right and 1 step down.