Ga naar hoofdinhoud

Veiligheid: zo werkt deze route

Je gastenboek werkt. Zolang jij de enige bezoeker bent, gaat alles goed, want je gebruikt je eigen formulier zoals het bedoeld is. Deze route gaat over de bezoeker die dat niet doet: die typt iets wat je niet verwachtte, verstuurt een verzoek zonder je formulier, of vraagt iets wat niet van hem is.

Het ene idee​

Alle reeksen komen neer op één regel, die je al kent uit Server of browser?:

Wat van de bezoeker komt, vertrouw je niet. De controle hoort op de server.

Een formulier, een verborgen knop, een cookie en een getal in het adres komen allemaal van de computer van de bezoeker, en daar heb je niets over te zeggen. Elke reeks laat één plek zien waar dat misgaat, en hoe je server het tegenhoudt.

Wat je al moet kunnen​

De route bouwt op de FastAPI-lessen tot en met Jouw project: formulieren, de database, templates, htmx, cookies en sessies. Heb je die gedaan, dan heb je ook een gastenboek om te beschermen.

De spelregel​

Alleen je eigen server

In deze route doe je een zwakheid eerst zelf na, klein en op je eigen computer. Stuur zulke verzoeken uitsluitend naar je eigen server op 127.0.0.1, en kijk alleen in je eigen database. Hetzelfde doen bij de site van een ander is een aanval, en strafbaar, ook als het "maar een testje" is.

De route​

Begin met Een script als bezoeker: daarin leer je verzoeken sturen zonder browser, en dat heb je in elke reeks nodig. Daarna volgen de reeksen, van dichtbij je eigen gastenboek naar ver weg:

ReeksDe vraag die hij beantwoordt
Invoer controlerenHoe houd je tegen wat niet in een veld hoort, als maxlength dat niet doet?
HTML van een bezoekerWat gebeurt er als een bezoeker HTML in je gastenboek typt?
Wie mag watHoe zorg je dat alleen de schrijver zijn bericht kan verwijderen?
Cookies afschermenHoe houd je een script weg bij het sessie-id?
Wachtwoorden veilig opslaanHoe bewaar je wachtwoorden zo dat een gelekte database ze niet weggeeft?
Te veel verzoekenWat doe je tegen een bezoeker die je server blijft bestoken?

Elke reeks begint met de zwakheid, gaat dan naar de verdediging in FastAPI, laat je die toepassen op je eigen project, en eindigt met wat echte sites nog meer doen. De route sluit af met Beveilig je eigen project, één lijst om je project na te lopen. Je kunt de reeksen ook los doen, maar Cookies bouwt op de server uit Wie mag wat.

Statuscodes​

Een statuscode zegt in één getal hoe een verzoek afliep. In deze route kom je deze tegen:

CodeBetekentWie stuurt hemWaar je hem ziet
200geluktje endpoint, als alles goed gaatoveral
400dit verzoek klopt nietjij, met HTTPException, voor een regel die je zelf bedachtInvoer, les 4
403dit mag jij nietjij, als de bezoeker iets van een ander wilWie mag wat, les 2
404bestaat nietFastAPI bij een onbekend pad, of jij bij een onbekend itemDetailpagina
422een veld past niet bij FormFastAPI zelf, voordat je functie draaitInvoer, les 2 en 3
429te veel verzoekenslowapi, je verzoeklimietTe veel verzoeken, les 4
500er ging iets mis in de serverniemand bewust: een fout in je codede terminal van je server

Begint een code met een 4, dan ligt het aan het verzoek. Begint hij met een 5, dan ligt het aan je server. Bij een 500 staat de echte foutmelding altijd in de terminal waarin je server draait.

Woorden​

In de lessen staat eerst wat iets is, en daarna pas hoe het heet. De naam heb je nodig als je er later zelf iets over opzoekt; veel namen zijn Engels.

WoordBetekentWaar
zwakheideen plek waar je server iets toelaat wat niet de bedoeling isoveral
escapenvan < een &lt; maken, zodat de browser tekst toont in plaats van HTMLXSS
XSS, cross-site scriptingHTML of een script van een bezoeker dat in de browser van een ander draaitXSS
broken access control, IDOReen endpoint dat niet controleert wie iets vraagtWie mag wat
httponlyeen instelling van een cookie: scripts mogen hem niet lezenCookies
CSRF, cross-site request forgeryeen andere site laat jouw browser iets doen op een site waar je bent ingelogdCookies
hasheen code die je van een wachtwoord maakt en niet kunt terugrekenenWachtwoorden
zout, salteen willekeurig stukje tekst per wachtwoord, zodat gelijke wachtwoorden verschillende hashes krijgenWachtwoorden
DoS, DDoSeen server zo druk maken dat echte bezoekers geen antwoord krijgen, door één of door heel veel computersTe veel verzoeken
verzoeklimiet, rate limiteen grens op het aantal verzoeken per bezoekerTe veel verzoeken
CVDeen gat netjes melden bij de eigenaar van een siteWie mag wat

Door naar Een script als bezoeker.