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,TokengenerierungoderPasswort speichern. Nutze hierfür existierende Standards. - Nutze eine
limitierte Anzahl von Anmeldeversucheund 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 (
HS256orRS256). - 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_uriserverseitig 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
stateParameter 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-typeim "Accept" Header der Anfrage und erlaube nur unterstützte Formate (wieapplication/xml,application/json, usw). Gib den Response406 Not Acceptablezurück, wenn keine der übergebenen Content-Typen unterstützt wird. - Validiere den
Content-Typeim 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, usw). - 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/ordersstatt/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 Bombezu 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: nosniffim Header. - Sende
X-Frame-Options: denyim Header. - Sende
Content-Security-Policy: default-src 'none'im Header. - Entferne Header wie
X-Powered-By,Server,X-AspNet-Versionusw, um eventuell veraltete Softwareversionen nicht zu verraten. - Sende immer einen
Content-Typebei Antworten. Wenn du ein JSON lieferst gib alsContent-Typeapplication/jsonan. - Gib niemals sensitive Daten zurück wie
Anmeldedaten,PasswörteroderSicherheitsschlüssel. - Verwende immer einen passenden HTTP Statuscode je nach Status der Operation (bspw.
200 OK,400 Bad Request,401 Unauthorized,405 Method Not Allowed, usw).
- 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 team@shieldfy.io.