Skip to content

Latest commit

 

History

History
66 lines (55 loc) · 5.96 KB

README-de.md

File metadata and controls

66 lines (55 loc) · 5.96 KB

English | 中文版 | Português (Brasil) | Français | 한국어 | Nederlands | Indonesia | ไทย | Русский | Українська | Español | Italiano | 日本語

API Security Checkliste

Checkliste für die wichtigsten Sicherheitsmaßnahmen beim Designen, Testen und Veröffentlichen deiner API.


Authentifizierung

  • Verwende kein Basic Auth. Nutze standardisierte Authentifizierungsmethoden (bspw. JWT, OAuth).
  • Erfinde das Rad nicht neu für Authentication, Tokengenerierung oder Passwort 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.

JWT (JSON Web Token)

  • 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 or RS256).
  • 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.

OAuth

  • Ü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.

Zugriff

  • 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.

Input

  • Nutze für Requests die passenden HTTP Methoden: GET (Lesen), POST (Erzeugen), PUT/PATCH (Ersetzen/Aktualisieren), and DELETE (Datensatz löschen), und gib 405 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 (wie application/xml, application/json, etc.). Gib den Response 406 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, oder API-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.

Verarbeitung

  • Ü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.

Output

  • 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 als Content-Type application/json an.
  • Gib niemals sensitive Daten zurück wie Anmeldedaten, Passwörter oder Sicherheitsschlü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.).

Kontinuierliche Integration (CI) & Continuous Delivery (CD)

  • 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).

Contribution

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].