Cross-Site Request Forgery, meestal afgekort tot CSRF, is een aanval die je browser misleidt om een actie uit te voeren op een site waarop je al bent ingelogd, zonder dat je het doorhebt. Je hebt nooit op de gevaarlijke knop geklikt, maar je browser stuurde het verzoek toch, met je actieve sessie eraan vast.
De truc in gewone taal. Stel, je bent in het ene tabblad ingelogd bij je bank. Dan open je in een ander tabblad een geprepareerde pagina, en die pagina stuurt stilletjes een verzoek ‘geld overmaken’ naar je bank. Omdat je browser je banklogin nog vasthoudt, komt het verzoek binnen alsof je het zelf met opzet deed. De site kan het verschil niet makkelijk zien. Dit verschilt van cross-site scripting, dat code in een pagina spuit; CSRF misbruikt het vertrouwen dat de site al in je ingelogde sessie stelde.
De truc blijft niet bij banken. Dezelfde aanval kan je accountmail wijzigen, een record verwijderen of een betaling goedkeuren op elke site waar één verzoek iets wezenlijks doet. Een verborgen formulier of een image-tag die naar de doel-URL wijst is vaak genoeg om het af te vuren.
De standaardoplossing is een CSRF-token: een geheime waarde die de server aan je pagina geeft en bij elke gevoelige actie terugeist. Een vervalst verzoek van een andere site kan die niet raden. De meeste moderne frameworks zetten ook het SameSite-cookieattribuut, dat de browser vertelt je sessie niet mee te sturen bij verzoeken van een andere site. Sterke authenticatie en zorgvuldige beveiligingsheaders verkleinen het risico verder.
Bij TopDevs bouwen we CSRF-bescherming standaard in elk formulier en elke actie, zodat een kwaadaardige pagina in een ander tabblad niet stilletjes namens je gebruikers kan handelen.