English | 繁中版 | 简中版 | العربية | বাংলা | Čeština | Deutsch | Ελληνικά | Español | فارسی | Français | हिंदी | Indonesia | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Polski | Português (Brasil) | Русский | ไทย | Türkçe | Українська | Tiếng Việt
Checklist met de belangrijkste tegenmaatregelen bij het ontwerpen, testen en uitbrengen van een API.
- Gebruik geen
Basic Auth
Gebruik industrie standaarden (v.b. JWT, OAuth). - Vind het wiel niet opnieuw uit voor
Authenticatie
,Genereren van Tokens
enOpslaan van Wachtwoorden
. Gebruik de standaarden. - Gebruik
Max Retry
en Jail features in de login. - Encrypt alle gevoelige data.
- Gebruik random ingewikkelde keys (
JWT Secret
) om brute forcing lastiger te maken. - Haal het algoritme niet uit de payload. Dwing het algoritme af in de backend (
HS256
ofRS256
). - Zet de token vervaltijd (
TTL
,RTTL
) zo kort mogelijk. - Sla geen gevoelige data op in de JWT payload, deze is makkelijk te decoderen.
- Vermijd het opslaan van te veel gegevens. JWT wordt meestal gedeeld in headers en ze hebben een maximale grootte.
- Limiteer het aantal requests om DDoS en/of Bruteforce aanvallen te ontkrachten.
- Gebruik HTTPS aan de server zijde om MITM (Man In The Middle Attacks) tegen te gaan.
- Gebruik de
HSTS
header i.c.m SSL om een SSL Strip attack te ontkrachten. - Schakel directoryvermeldingen uit.
- Sta voor privé-API's alleen toegang toe vanaf op de witte lijst geplaatste IP's/hosts.
- Valideer ALTIJD de
redirect_uri
op de server om alleen toegestane URL te accepteren. - Probeer altijd een exchange voor code, niet voor tokens (sta
response_type=token
niet toe). - Gebruik de
state
parameter met een random hash om CSRF op een OAuth authentication process te voorkomen. - Definieer een standaard scope, en valideer deze scope parameter voor elke applicatie.
- Gebruik de correcte HTTP methode voor de operatie,
GET (lezen)
,POST (schrijven)
,PUT (vervangen/updaten)
andDELETE (verwijderen)
. - Valideer de
content-type
header bij een request Accept header (Content Negotiation) om alleen de ondersteunde formaten toe te staan (b.v.application/xml
,application/json
... enz) en stuur een406 Not Acceptable
response als decontent-type
niet ondersteund is. - Valideer de
content-type
header van gestuurde data (b.v.application/x-www-form-urlencoded
,multipart/form-data
,application/json
... enz). - Valideer de gebruiker invoer om veel voorkomende kwetsbaarheden te voorkomen (v.b.
XSS
,SQL-Injection
,Remote Code Execution
... enz). - Gebruik geen gevoelige data (
credentials
,Wachtwoorden
,security tokens
, ofAPI keys
) in de URL, maar gebruik de standaard Authorization header. - Gebruik alleen versleuteling aan de serverzijde.
- Gebruik een API Gateway service voor caching, policies (b.v.
Quota
,Spike Arrest
,Concurrent Rate Limit
) en voor het dynamisch deployen van API middelen.
- Controleer dat alle endpoints zijn beschermd achter de authenticatie om het omzeilen van authenticatie te voorkomen.
- Gebruik
/me/orders
i.p.v./user/654321/orders
om het 'lekken' van id's te voorkomen. - Gebruik geen auto increment id's. Maak gebruik van
UUID
. - Als je XML files parsed, controleer dat entity parsing niet aan staat om
XXE
(XML external entity attack) te voorkomen. - Als je XML files parsed, controleer dat entity expansion niet aan staat om
Billion Laughs/XML bomb
te voorkomen viaexponential entity expansion attack
. - Gebruik CDN voor het uploaden van bestanden.
- Als er met grote/mega hoeveelheden data gewerkt wordt, gebruik dan Workers en Queues om snel een response te geven en HTTP Blocking te voorkomen.
- Vergeet niet om de DEBUG mode uit te zetten.
- Gebruik niet-uitvoerbare stacks indien beschikbaar.
- Stel de
X-Content-Type-Options: nosniff
header in. - Stel de
X-Frame-Options: deny
header in. - Stel de
Content-Security-Policy: default-src 'none'
header in. - Verwijder vingerafdruk headers -
X-Powered-By
,Server
,X-AspNet-Version
enz. - Dwing
content-type
headers af voor de response. Als jeapplication/json
antwoordt, dan is decontent-type
:application/json
. - Stuur geen gevoelige data terug:
Gebruikersnamen
,Wachtwoorden
,security tokens
. - Geef de correcte HTTP antwoord code terug op basis van de uitgevoerde operatie (v.b.
200 OK
,400 Bad Request
,401 Unauthorized
,405 Method Not Allowed
... enz).
- Controleer het ontwerp en de implementatie met unit/integration test dekking.
- Gebruik een code review traject en controleer niet zelf je eigen code.
- Scan de API voor het naar productie zetten door AV software, niet alleen eigen code maar ook de libraries en andere gebruikte dependencies.
- Voer continu beveiligingstests (statische/dynamische analyse) uit op uw code.
- Controleer uw afhankelijkheden (zowel software en besturingssysteem) op bekende kwetsbaarheden.
- Ontwikkel een terugrol oplossing.
- Gebruik gecentraliseerde aanmeldingen voor alle services en componenten.
- Gebruik agents om al het verkeer, fouten, verzoeken en reacties te monitoren.
- Gebruik waarschuwingen voor SMS, Slack, E-mail, Telegram, Kibana, Cloudwatch, etc.
- Zorg ervoor dat u geen gevoelige gegevens registreert, zoals creditcards, wachtwoorden, pincodes, enz.
- Gebruik een IDS- en/of IPS-systeem om uw API-verzoeken en instanties te monitoren.
- yosriady/api-development-tools - Een verzameling nuttige bronnen voor het bouwen van RESTful HTTP+JSON API's.
Translation by | Vertaling door :S.Holzhauer
Voel u vrij om bij te helpen door deze repository te fork, wijzigingen aan te brengen, en pull requests in te dienen. Voor vragen kunt u ons mailen op [email protected]
.