English | 繁中版 | 简中版 | العربية | Azərbaycan | Български | বাংলা | Català | Čeština | Ελληνικά | Español | فارسی | Français | हिंदी | Indonesia | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Nederlands | Polski | Português (Brasil) | Русский | ไทย | Türkçe | Українська | Tiếng Việt
Checkliste für die wichtigsten Sicherheitsmaßnahmen beim Designen, Testen und Veröffentlichen deiner API.
- Verwende kein
Basic Auth. Nutze standardisierte Authentifizierungsmethoden. - 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.
- 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. - Deaktivieren Verzeichniseinträge.
- Erlauben für private APIs den Zugriff nur von IPs/Hosts auf der Whitelist.
- Ü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.
- 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. - Verwenden nur serverseitige Verschlüsselung.
- 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.
- Verwenden nicht ausführbare Stacks sofern verfügbar.
- 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. - Do not return overly specific error messages to the client that could reveal implementation details, use generic messages instead, and log detailed information only on the server side.
- 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.
- Führen kontinuierlich Sicherheitstests (statische/dynamische Analyse) für Ihren Code.
- Überprüfen Ihre Abhängigkeiten (Software und Betriebssystem) auf bekannte Schwachstellen.
- Stelle sicher, dass du im Fehlerfall auch schnell wieder den vorherigen Stand einspielen kannst (Rollback).
- Verwenden Sie zentralisierte Logins für alle Dienste und Komponenten.
- Verwenden Sie Agenten, um den gesamten Datenverkehr, Fehler, Anfragen und Antworten zu überwachen.
- Verwenden Sie Benachrichtigungen für SMS, Slack, E-Mail, Telegramm, Kibana, Cloudwatch, usw.
- Stellen Sie sicher, dass Sie keine sensiblen Daten wie Kreditkarten, Passwörter, PINs, usw protokollierst.
- Verwenden Sie ein IDS-System und/oder ein IPS-System um die Anforderungen und Instanzen Ihrer API zu überwachen.
- yosriady/api-development-tools - Eine Sammlung nützlicher Ressourcen für den Aufbau von RESTful HTTP+JSON APIs.
- You don't need JWT, just use a randomly generated API key. If you need asymmetric encryption or tamper prevention, here are some alternatives to JWT.
- Implement sliding window rate limiting per API key and IP.
- Use exponential backoff for repeated failed authentication attempts.
- Implement CAPTCHA or proof-of-work challenges after suspicious activity.
- Monitor and alert on unusual API usage patterns (time, volume, endpoints).
- Disable introspection in production environments.
- Implement query depth limiting to prevent nested query attacks.
- Use query cost analysis to prevent resource exhaustion.
- Whitelist allowed queries in production when possible.
- Rotate API keys and secrets on a regular schedule.
- Use hardware security modules (HSM) for signing operations.
- Implement secret scanning in CI/CD pipelines.
- Never commit secrets to version control - use environment variables or secret managers.
- Implement mutual TLS (mTLS) for service-to-service communication.
- Validate all requests even from internal services.
- Use short-lived tokens with automatic refresh.
- Implement request signing for sensitive operations.
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].