Beveilig een API met gereguleerde data door uit te werken wie hem zou kunnen misbruiken, autorisatie te controleren op elk object en elk veld, zo min mogelijk data te verzamelen en terug te geven, en geheimen en auditlogs streng te beheren. De zwakke plekken die in de praktijk het zwaarst wegen, zijn gaten in de autorisatie en responses die te veel data prijsgeven, niet gebroken versleuteling.
Begin met een dreigingsmodel voor de data, niet voor het framework
Schrijf voordat je tools kiest op wat de API ontsluit en wie hem zou kunnen misbruiken. Voor een bank gaat het om rekening- en transactiegegevens; voor een energie- of nutsbedrijf kan het gaan om meetgegevens, klantcontracten en operationele metingen uit het net.
Een bruikbaar dreigingsmodel is kort. Het noemt de gevoelige data, elke aanroeper die erbij kan, de acties die elke aanroeper mag uitvoeren en wat er gebeurt als een van hen gecompromitteerd raakt. Dat document stuurt vervolgens elke maatregel hieronder, en het vertelt reviewers wat ze moeten testen.
- Welke data persoonlijk, vertrouwelijk of gereguleerd is, en waar die is opgeslagen.
- Elke afnemer van de API: interne services, partners, mobiele apps en beheerders.
- Wat elke afnemer mag lezen, wijzigen of in gang zetten.
- De impact van een gelekt token, een kwaadwillende insider of een gecompromitteerd systeem van een partner.
Authenticeer elke aanroeper en autoriseer daarna elk object
Gebruik een standaardprotocol zoals OAuth 2.0 met OpenID Connect voor gebruikers, en kortlevende tokens of mutual TLS voor aanroepen tussen services. Vermijd langlevende, gedeelde API-sleutels, want niemand kan zien welk systeem ze gebruikte en je kunt ze niet intrekken zonder andere systemen te breken.
Authenticatie bewijst alleen wie er aanroept. Nummer één in de OWASP API Security Top 10 is broken object level authorization: een geldige gebruiker verandert een identifier in het request en leest het record van iemand anders. Controleer op de server voor elk object, elke functie en elk gevoelig veld wie de eigenaar of tenant is, en vertrouw nooit een identifier of rol die door de client wordt meegestuurd.
Geef elke client en service zo min mogelijk rechten
Minimale rechten beperken de schade als er toch iets misgaat. Geef elke afnemer eigen toegangsgegevens, beperk tokens tot specifieke handelingen en zet beheer-endpoints op een apart pad met strengere controles.
Pas dezelfde regel toe onder de API. Het serviceaccount dat meetgegevens leest, hoort ze niet te kunnen verwijderen, en een rapportagejob hoort te verbinden met een databaserol die alleen mag lezen. Loop rechten volgens een vast schema na, want toegang die voor een eenmalige taak is gegeven, blijft meestal voor altijd bestaan.
Verzamel minder, geef minder terug en bewaar het korter
Dataminimalisatie is zowel een beginsel van de AVG als een sterke beveiligingsmaatregel: data die je nooit opslaat, kan niet lekken. Vraag je per veld af of de service het echt nodig heeft, en laat weg of pseudonimiseer wat niet nodig is.
Pas dezelfde discipline toe op responses. Leg expliciete responseschema's vast in plaats van hele databaseobjecten te serialiseren, maskeer identifiers zoals rekeningnummers waar de volledige waarde niet nodig is, en stel bewaartermijnen in zodat oude records worden verwijderd. Documenteer de rechtsgrond voor elk verwerkingsdoel en sluit verwerkersovereenkomsten met elke leverancier die de data verwerkt. Dit is technische praktijk, geen juridisch advies, dus betrek je functionaris gegevensbescherming of je juridisch adviseur bij de juridische beoordeling.
Valideer alle invoer en begrens wat één aanroeper kan verbruiken
Behandel elk request als vijandig tot het is gevalideerd. Dwing per endpoint een schema af, weiger onbekende velden en gebruik geparametriseerde queries, zodat invoer nooit onderdeel wordt van een databasecommando.
Verschillende API-risico's van OWASP komen voort uit ontbrekende limieten, niet uit slechte code. Stel per client een rate limit in, begrens paginagroottes en payloadgroottes, en bescherm gevoelige bedrijfsprocessen zoals betalingen of contractwijzigingen tegen geautomatiseerd misbruik. Haalt de API namens aanroepers externe URL's op, beperk dan de bestemmingen om server-side request forgery te voorkomen.
Houd geheimen buiten code, images en logs
Databasewachtwoorden, ondertekeningssleutels en toegangsgegevens van partners horen in een aparte secrets manager, worden tijdens runtime ingeladen en volgens een vast schema vervangen. Scan repositories en container-images in de buildpipeline op geheimen, en beschouw elk geheim dat in versiebeheer belandt als gecompromitteerd.
Scheid geheimen per omgeving, zodat een gelekt testwachtwoord nooit toegang geeft tot productie. Beperk wie geheimen in productie kan lezen, en log elke toegang ertoe.
Log voor audits en ontwerp voor minder incidenten
Gereguleerde omgevingen moeten achteraf een eenvoudige vraag kunnen beantwoorden: wie heeft welke data ingezien, wanneer en via welke client. Leg dat vast voor elke gevoelige lees- en schrijfactie, bewaar logs op een plek waar beheerders van de applicatie ze niet kunnen wijzigen, en houd persoonsgegevens buiten logberichten.
Combineer logging met alerts op ongebruikelijke patronen, zoals één client die veel meer records leest dan normaal, en met een getest plan voor incidentrespons. Via Sopra Steria bouwden onze engineers beveiligde API's voor gevoelige gegevens van nutsbedrijven onder regelgevende randvoorwaarden, en leidden ze een tool voor operationele supervisie waarbij afgedwongen beveiligingsstandaarden samengingen met minder productie-incidenten. SDK Enterprises past dezelfde werkwijze vandaag toe op projecten voor klanten.
De kern
- Een kort, schriftelijk dreigingsmodel voor de data hoort elke beveiligingsmaatregel op de API te sturen.
- Controleer autorisatie op de server voor elk object, elke functie en elk gevoelig veld, niet alleen bij het inloggen.
- Minimale rechten gelden evengoed voor tokens, serviceaccounts en databaserollen.
- Dataminimalisatie verkleint zowel je risico onder de AVG als de impact van een datalek.
- Auditlogs moeten laten zien wie wat heeft ingezien en wanneer, zonder zelf persoonsgegevens te lekken.
Veelgestelde vragen
Is HTTPS genoeg om een API te beveiligen?
Nee. TLS beschermt data onderweg, maar bij veel inbreuken op API's gaat het om geauthenticeerde aanroepers die bij data komen die ze niet zouden mogen zien. Autorisatiecontroles, validatie van invoer, rate limits en auditlogging blijven nodig.
Wat is broken object level authorization?
Het is een fout waarbij de API controleert of een aanroeper is ingelogd, maar niet of het opgevraagde record van hem is. Door een identifier in de URL of de body te veranderen, komen dan de gegevens van andere gebruikers vrij. De oplossing is een controle op eigenaar of tenant op de server, voor elk object.
Schrijft de AVG specifieke beveiligingsmaatregelen voor API's voor?
De AVG eist passende technische en organisatorische maatregelen voor het betreffende risico, zonder specifieke tools voor te schrijven. Maatregelen zoals toegangsbeperking, minimalisatie, pseudonimisering en logging zijn gangbare manieren om aan die eis te voldoen, en je juridisch adviseurs moeten bevestigen wat in jouw geval geldt.