0%

Hoofdstuk 1

Wat er mis kan gaan

Welkom bij de cursus

Hoi, ik ben Erik. Ik schrijf en onderhoud deze cursus, net als de rest van Python Land.

In with Python heb je een leeslijstdienst gebouwd met een login, een en tokens die elke schrijfactie bewaken. Hij werkt en de tests slagen. Die cursus vroeg of het juiste verzoek het juiste antwoord krijgt. Deze cursus vraagt wat iemand de dienst zou kunnen laten doen wat jij, de eigenaar, nooit bedoeld hebt. Je zoekt de zwakke plekken zelf en dicht ze een voor een.

Wat je gaat beveiligen

HoofdstukkenWat je dicht
1nog niets: je benoemt wat er op het spel staat en bewijst één zwakke plek met een test
2 en 3wachtwoorden die een kopie van de data prijsgeeft
4 die nooit eindigen
5tokens die in de staan
6een lezer die de boeken van een andere lezer verandert, en eindeloos raden naar logins
7verzoekdata die te vroeg vertrouwd wordt
8 en 9verzoeken die een andere website in de browser van een gebruiker start
10gewoon HTTP
11het eindproject: elf zwakke plekken, en geen hoofdstuk dat zegt waar je moet zoeken

De verandert nooit. Je voert een aanval uit en ziet dat hij werkt. Je schrijft een test die de aanval uitvoert en faalt. Je past de code aan, en de test slaagt.

Eén regel

Val alleen aan wat van jou is.

Elke aanval in deze cursus is gericht op handle() in je eigen project, in het geheugen of op 127.0.0.1, het dat je eigen machine gebruikt om met zichzelf te praten. Het hulpprogramma dat voor deze cursus is geschreven, pl_sec.py, neemt geen hostnaam aan, dus je kunt het nergens anders op richten.

Dezelfde technieken werken tegen echte diensten. Ze gebruiken tegen een dienst die niet van jou is, zonder toestemming van de eigenaar, is op de meeste plaatsen strafbaar en gaat in tegen het doel van deze cursus.

Welke hiervan mag je aanvallen met wat deze cursus je leert?

Wat de site wel en niet kan bereiken

De sandboxes op Python Land hebben geen route naar het openbare internet. Geen enkele les benadert een echte website.

De site heeft ook geen browser. Dat doet er vanaf hoofdstuk 8 toe: welke cookies met een verzoek meegaan, en welke pagina welk antwoord mag lezen, zijn beslissingen die een browser neemt. Daarom schrijf je in hoofdstuk 8 en 9 zelf een klein model van een browser, regel voor regel, als gewone Python-. Het model volgt de gepubliceerde standaarden. Het blijft een model, en de lessen zeggen waar het eenvoudiger is dan een echte browser.

Hoofdstuk 8 en 9 gaan over wat een browser doet met cookies en andere sites. Wat speelt hier de browser?

Wat er in het project zit

  • reading_server.py is de server zoals HTTP with Python hem achterliet, in een nagekeken kopie, zodat iedereen met dezelfde code begint.

  • http_adapter.py is het bestand dat je kent plus één methode, do_OPTIONS, die hoofdstuk 9 nodig heeft. wire.py is ongewijzigd.

  • In tests/test_attacks.py komen je aanvalstests, en tests/helpers.py bevat kleine functies die die tests gebruiken.

  • SECURITY.md is de van zwakke plekken die je vindt. Hij begint met vier lege rijen.

  • pl_sec.py is een hulpprogramma dat voor deze cursus is geschreven. Het speelt de andere kant: een client, een dief, een aanvaller.

Je client, reading_client.py, gaat niet mee. Hoofdstuk 5 verandert de tokens die hij zou moeten sturen, en deze cursus gaat over de server.

Wat deze cursus van je nodig heeft

Je hebt HTTP with Python nodig:

  • handle(request, state), en de verzoek- en antwoord- waarmee die werkt;

  • cookies en een sessie die op de server wordt bijgehouden;

  • Basic-inloggegevens bij de login en bearer-tokens bij schrijfacties, en wanneer een server 401 antwoordt en wanneer 403;

  • een -digest uit hashlib, en secrets.token_urlsafe;

  • tests die de handler rechtstreeks aanroepen en draaien met python -m pytest -q.

Python Fundamentals II wordt aangeraden, maar is niet verplicht. http_adapter.py bevat een klasse. Je leest die één keer, en geen enkele oefening vraagt je er zelf een te schrijven.

Maak kennis met Monty

Monty is de leergids van Python Land en staat naast elke les. Vraag om een tweede uitleg, een hint die het antwoord niet weggeeft, of hulp bij het lezen van een foutmelding.

Als je bent ingelogd, krijg je met een gratis account 5 keer Monty-hulp per dag, gedeeld over alle cursussen. Een goede eerste vraag hier:

Wat controleerde mijn leeslijstserver, in gewone woorden, voordat hij een verzoek een boek liet veranderen?

De volgende les bekijkt die server door de ogen van iemand die hem wil misbruiken.

Met Guided krijg je tot 50 keer Monty-hulp per dag. Vragen, hints, foutuitleg, extra oefeningen en codefeedback delen dezelfde dagelijkse limiet. De teller laat zien hoeveel hulp je nog hebt en wanneer de limiet wordt vernieuwd. Elke les en gewone herkansing van een oefening blijft gratis.