English | 繁中版 | 簡中版 | Português (Brasil) | Français | 한국어 | Nederlands | Indonesia | ไทย | Русский | Українська | Español | Italiano | 日本語 | Türkçe | Tiếng Việt | Монгол | हिंदी | العربية | Polski
Checkliste für die wichtigsten Sicherheitsmaßnahmen beim Designen, Testen und Veröffentlichen deiner API.
- Verwende kein
Basic Auth
. Nutze standardisierte Authentifizierungsmethoden (bspw. JWT, OAuth). - Erfinde das Rad nicht neu für
Authentication
,Tokengenerierung
oderPasswort speichern
. Nutze hierfür existierende Standards. - Nutze eine
limitierte Anzahl von Anmeldeversuche
und Aussperrfunktionen (Ban, IP-Block, Permanent) im Loginprozess. - Nutze Verschlüsselung für alle sensitiven Daten.
- Verwende einen per Zufall generierten, komplizierten Schlüssel (
JWT Secret
), um Brute Force Attacken gegen diesen so schwer wie möglich zu machen. - Verwende den Algorithmus des Payloads ausschließlich über das Backend, sodass dieser geheim bleibt (
HS256
orRS256
). - Lege einen möglichst kurzen Gültigkeitszeitraum für den Token fest (
TTL
,RTTL
). - Speichere keine sensitiven Daten im JWT Payload, denn dieser kann einfach entkodiert werden.
- Überprüfe stets die
redirect_uri
serverseitig und erlaube nur URLs aus einer Whitelist. - Frage immer mit einem Access-Code (vom initialen Request) einen Access-Token ab (verbiete
response_type=token
). - Nutze den
state
Parameter immer mit einem zufälligem Hash, um CSRF auf den OAuth Authentifizierungsprozess zu verhindern. - Definiere einen Standard-Scope und validiere alle Scope Parameter für jede Applikation.
- Limitiere alle Requests (Throttling), um DDoS / Brute-Force Attacken zu verhindern.
- Nutze HTTPS serverseitig, um MITM (Man In The Middle Attack) zu verhindern.
- Setze
HSTS
(HTTP Strict Transport Security) im Header bei SSL, um SSLStrip Attacken zu verhindern.
- Nutze für Requests die passenden HTTP Methoden:
GET (Lesen)
,POST (Erzeugen)
,PUT/PATCH (Ersetzen/Aktualisieren)
, andDELETE (Datensatz löschen)
, und gib405 Method Not Allowed
, wenn die angeforderte Methode nicht auf die Ressource passt. - Validiere den
content-type
im "Accept" Header der Anfrage und erlaube nur unterstützte Formate (wieapplication/xml
,application/json
, etc.). Gib den Response406 Not Acceptable
zurück, wenn keine der übergebenen Content-Typen unterstützt wird. - Validiere den
Content-Type
im Header der Anfrage für übertragene Daten (bspw. POST oder PUT) wie bspw.application/x-www-form-urlencoded
,multipart/form-data
,application/json
, usw. - Validiere immer alle Eingaben im Request und allen Parametern um allgemeine Angriffsmöglichkeiten zu verhindern (bspw.
XSS
,SQL-Injection
,Remote Code Execution
, etc.). - Verwende niemals sensitive Daten (
Anmeldedaten
,Passwörter
,Security Tokens
, oderAPI-Schlüssel
) in der URL, aber nutze den standardisierten "Authorization" Header. - Nutze ein API Gateway Service für Caching, Rate Limit Regeln (bspw.
Quota
,Spike Arrest
,Concurrent Rate Limit
) und der Bereitstellung dynamischer API Ressourcen.
- Überprüfe, ob alle Endpunkte mit einer Authentifizierung geschützt sind.
- Nutzereigene Ressourcen-Ids sollten vermieden werden. Verwende
/me/orders
statt/user/654321/orders
. - Verwende keine automatisch hochzählende IDs, sondern
UUID
, damit Ressourcen nicht einfach erraten werden können. - Beim Verarbeiten einer XML-Datei, sollte Entitätsverarbeitung deaktiviert sein, um
XXE
(XML External Entity Attacken) zu verhindern. - Beim Verarbeiten einer XML-Datei, sollte Entitätsexpansion deaktiviert sein, um
Billion Laughs/XML Bombe
zu verhindern. - Nutze CDN für Dateiuploads.
- Wenn du eine große Menge an Daten verarbeiten musst, nutze Worker und Queues, um so viel wie möglich im Hintergrund zu verarbeiten und schnelle Antwortzeiten zu gewährleisten.
- Vergiss nicht den DEBUG Modus zu deaktivieren.
- Sende
X-Content-Type-Options: nosniff
im Header. - Sende
X-Frame-Options: deny
im Header. - Sende
Content-Security-Policy: default-src 'none'
im Header. - Entferne Header wie
X-Powered-By
,Server
,X-AspNet-Version
etc., um eventuell veraltete Softwareversionen nicht zu verraten. - Sende immer einen
Content-Type
bei Antworten. Wenn du ein JSON lieferst gib alsContent-Type
application/json
an. - Gib niemals sensitive Daten zurück wie
Anmeldedaten
,Passwörter
oderSicherheitsschlüssel
. - Verwende immer einen passenden HTTP Statuscode je nach Status der Operation (bspw.
200 OK
,400 Bad Request
,401 Unauthorized
,405 Method Not Allowed
, etc.).
- Nutze Unit- und Integrationstest und deren Abdeckung (Test Coverage), um deine Implementierungen und Design zu kontrollieren.
- Nutze einen Code Review Prozess, aber bleib sachlich.
- Stelle sicher, dass alle verwendeten Komponenten (Bibliotheken und alle anderen Abhängigkeiten) noch einmal statisch von einer Anti-Virus Software überprüft wurden bevor diese in die Produktionsumgebung gehen.
- Stelle sicher, dass du im Fehlerfall auch schnell wieder den vorherigen Stand einspielen kannst (Rollback).
- yosriady/api-development-tools - Eine Sammlung nützlicher Ressourcen für den Aufbau von RESTful HTTP+JSON APIs.
Du kannst gerne etwas beisteuern, indem du einen Fork dieses Repositorys erstellst, Änderungen vornimmst und dann einen Pull Request anlegst. Bei Fragen schick uns eine E-Mail an [email protected]
.