Beste beveiligingspraktijken voor API’s

Application Programming Interfaces (API's) zijn een integraal onderdeel geworden van de ontwikkelingswereld. Een API maakt het mogelijk dat een applicatie communiceert met een andere applicatie.

Development
15 april 2022
Martijn van der Put

API's worden voornamelijk gebruikt om de functionaliteit van een bestaande applicatie te verbeteren en meer waarde toe te voegen voor de eindgebruikers. Echter, met het toenemende gebruik van API's zijn ze een focuspunt geworden voor beveiligingsrisico's. Ze zijn vatbaar geworden voor cyberaanvallen en misbruik. Met andere woorden: het is nu van cruciaal belang om adequate beveiligingsmaatregelen te nemen bij het omgaan met API's.

Implementeer authenticatie

Je API's moeten authenticatie uitvoeren voordat ze enig verzoek verwerken. Authenticatie probeert de gebruiker of het programma dat het verzoek heeft verstuurd te identificeren. API-authenticatie gebeurt meestal via een wachtwoord, multi-factor authenticatie of via authenticatietokens. Meestal gebruiken organisaties tokens - tokens die samen met het verzoek worden verzonden, worden vergeleken met de tokens in de database. Op deze manier kunnen verzoeken eenvoudig worden bijgehouden.

Het OAuth-protocol is een veel vertrouwde en gebruikte API voor gebruikersauthenticatie. Het geeft ook de beheerders een portaal om authenticatietokens aan derden te verlenen. Beheerders kunnen aangepaste toegangsregels instellen voor elk token op basis van de bron van het API-verzoek.

Implementeer autorisatie

Nadat de identiteit van de gebruiker is geauthentiseerd, moet er een veilige manier zijn om toegang te verlenen aan de gebruiker. En hier komt autorisatie van pas. Simpel gezegd; autorisatie staat toe of blokkeert gebruikers bij het uitvoeren van bepaalde handelingen op basis van hun authenticatieresultaat. De autorisatie-informatie kan ook worden opgenomen in het verzoekstoken. Met name REST API moet het verzoek telkens authentiseren en autoriseren, zelfs als dezelfde gebruiker meerdere verzoeken probeert te doen. Dit komt omdat REST-communicatie stateless is.

De autorisatie kan ook gebaseerd zijn op gebruikersrollen. Volg altijd het principe van het minste privilege - op deze manier kunnen alleen essentiële bronnen worden benaderd, terwijl gevoelige gegevens buiten bereik van gebruikers blijven, wat op zijn beurt het risico op het in verkeerde handen vallen van gevoelige gegevens elimineert.

Codeer verzoeken en antwoorden

Man-in-the-middle-aanvallen komen vrij vaak voor bij API's. Om dit soort aanvallen te voorkomen, moet de data die tussen de gebruiker en de API reist worden versleuteld. Zelfs als de tussenpersoon het antwoord of verzoek onderschept, zal de data nutteloos voor hen zijn zonder de decryptiemethode.

De versleuteling voor REST API kan worden bereikt met behulp van het Transport Layer Security (TLS) Protocol of het Secure Socket Layer (SSL) Protocol. Echter, het SSL- en TLS-protocol versleutelen alleen de data die wordt verzonden en niet de data die achter de API zit. Als gevolg hiervan moet deze gevoelige informatie zelf in de database worden versleuteld. Gebruik een Web Application Firewall (WAF) met SSL om code-injecties en DDoS-aanvallen te voorkomen.


Vestig API quota’s

Brute force-aanvallen zoals DDoS kunnen worden voorkomen door een limiet op API-aanroepen in te stellen. Je kunt een redelijk limiet instellen voor het aantal API-aanroepen dat de server op enig moment kan ontvangen. De twee belangrijkste manieren om het aantal API-aanroepen te beperken, zijn:

  1. Throttling: Bij throttling kan de gebruiker nog steeds toegang krijgen tot de gegevens van API's zodra de limiet is bereikt, maar de reactiesnelheid wordt verminderd. 
  2. Quota's: Quota's beperken het aantal API-verzoeken dat een gebruiker in de loop van de tijd kan verzenden. Als het aantal wordt overschreden, krijgt de gebruiker geen toegang.

Valideer alle verzoeken

Onthoud dat API-verzoeken, zelfs van perfect betrouwbare bronnen, een broedplaats kunnen zijn voor potentiële hackers. Ga er altijd van uit dat gegevens nooit veilig zijn als het om API's gaat. Zorg dus altijd voor regels die helpen bepalen of het verzoek legitiem, schadelijk of legitiem maar ongeldig is. Met de juiste regels voorkom je het injecteren van schadelijke code in je applicatie. En ja, het API-verzoek moet alleen worden verwerkt nadat het de validatie heeft doorstaan. Zo niet, dan moet worden voorkomen dat het verzoek de data laag van de applicatie bereikt, ongeacht hoe betrouwbaar de bron ook is.

Uitvoeren van beveiligingstesten

Zorg ervoor dat je API-verzoeken veilig zijn en bestand zijn tegen elke vorm van cyberaanval. Neem dus voldoende tijd en voer voldoende beveiligingstests uit. Schakel tijdens deze fase professionele hackers in om je API te hacken en bloot te stellen aan verschillende soorten kwetsbaarheden. Bovendien is testen geen eenmalig proces. Blijf het op regelmatige intervallen doen, vooral na elke update van de API.

Log alle activiteiten

Tot nu toe hebben we verschillende manieren gezien om te voorkomen dat de API wordt gehackt. Maar als de API al is gecompromitteerd, wat moet je dan doen? En dat is waar je een methode moet hebben om de bron van het probleem op te sporen en er een rapport over op te stellen. Het loggen van alle activiteiten van de API is essentieel. Je zult het uiterst nuttig vinden tijdens een inbreuk. Het zal helpen begrijpen hoe de aanvallers zijn binnengekomen. En deze waardevolle informatie zal verder helpen de beveiliging van je API te versterken.


Conclusie

Bij het ontwerpen van de API, volg de bovenstaande best practices om anders vermijdbare beveiligingsaanvallen te voorkomen. Het versterken van je API-beveiliging kan wat extra inspanning en tijd vergen, maar het is de moeite waard om gevoelige gegevens in je server te beschermen. Het zal helpen vertrouwen op te bouwen bij je eindgebruikers.


Wil je meer informatie? Neem dan contact op.

Cookies
Deze site gebruikt geanonimiseerde cookies. Klik op "Akkoord" als je akkoord gaat met het gebruik van cookies, of klik op "Aanpassen" om je voorkeuren te bepalen.
Deze site gebruikt geanonimiseerde cookies.