So stellen Sie die REST-API-Sicherheit sicher

Web Application Programming Interfaces (APIs) bieten das Backend für moderne Web- und mobile Anwendungen. Web-API-Aufrufe machen über 80% des gesamten Webverkehrs aus, und Cyberkriminelle zielen zunehmend auf APIs ab. REST-APIs sind die häufigste Art von Web-APIs für Webdienste. Lassen Sie uns sehen, was Sie tun können, um die REST-API-Sicherheit zu gewährleisten.

REST-API-Sicherheit

Was ist eine REST-API?

REST (kurz für REpresentational State Transfer) ist ein Softwarearchitekturstil für die Webentwicklung, der normalerweise mit HTTP-Kommunikation verwendet wird. RESTful-APIs (oder einfach REST-APIs) sind Anwendungsprogrammierschnittstellen, die REST-Prinzipien folgen und es Webclients und -servern ermöglichen, mit einer Vielzahl von Webressourcen zu interagieren. REST-APIs verwenden standardmäßige HTTP-Verben (Methoden) und Statuscodes, um ein gewisses Maß an Standardisierung bereitzustellen. Der Zugriff erfolgt über HTTP-URLs und wird häufig für Webdienste verwendet.

Hinweis: REST-APIs sind wie das HTTP-Protokoll selbst zustandslos, was bedeutet, dass sie keine Informationen über aktuelle Verbindungen oder Sitzungen speichern. RESTful-Webdienste bieten Möglichkeiten, auf Ressourcen zuzugreifen und diese zu bearbeiten, während die Sitzungsverwaltung von der Anwendung übernommen werden sollte.

Zwei Ebenen der REST-API-Sicherheit

Bevor wir auf die technischen Details eingehen, ist eine wichtige Sache zu beachten. Daher müssen Sie über Sicherheit auf zwei Ebenen nachdenken: Zugriff auf die API und dann Zugriff auf die Anwendung.

Auf API-Ebene benötigen Sie die richtige Authentifizierung, Autorisierung, Zugriffsrechte usw., um sicherzustellen, dass nur zugelassene Clients die Schnittstelle verwenden und nur zugelassene Vorgänge ausführen können. Auf Anwendungsebene müssen Sie sicherstellen, dass Ihre Anwendungsendpunkte (die URLs, die für den Zugriff auf die Schnittstelle verwendet werden) nicht anfällig für Angriffe sind, die die Schnittstelle durchdringen oder umgehen.

Mal sehen, wie Sie die REST-API-Sicherheit auf diesen beiden Ebenen gewährleisten können. Eine detaillierte Beschreibung der Best Practices für die API-Sicherheit finden Sie im Spickzettel zur REST-Sicherheit von OWASP.

Gewährleistung eines sicheren API-Zugriffs

Die meisten Web-APIs sind dem Internet ausgesetzt und benötigen daher geeignete Sicherheitsmechanismen, um Missbrauch zu verhindern, sensible Daten zu schützen und sicherzustellen, dass nur authentifizierte und autorisierte Benutzer darauf zugreifen können.

Verbindungssicherheit

Sicherheit beginnt mit der HTTP-Verbindung selbst. Sichere REST-APIs sollten nur HTTPS-Endpunkte bereitstellen, um sicherzustellen, dass die gesamte API-Kommunikation mit SSL / TLS verschlüsselt wird. Auf diese Weise können Clients den Dienst authentifizieren und die API-Anmeldeinformationen und übertragenen Daten schützen.

API-Zugriffskontrolle

Viele Web-APIs stehen nur authentifizierten Benutzern zur Verfügung, z. B. weil sie privat sind oder eine Registrierung oder Zahlung erfordern. Da REST-APIs zustandslos sind, wird die Zugriffskontrolle von lokalen Endpunkten übernommen. Die gängigsten REST API-Authentifizierungsmethoden sind:

  • HTTP-Basisauthentifizierung: Anmeldeinformationen werden direkt in HTTP-Headern in Base64-Codierung ohne Verschlüsselung gesendet. Dies ist die einfachste Authentifizierungsmethode und am einfachsten zu implementieren. Es ist auch am wenigsten sicher, da vertrauliche Daten als Klartext übertragen werden und daher nur in Kombination mit HTTPS verwendet werden sollten.
  • JSON Web Tokens (JWT): Anmeldeinformationen und andere Zugriffsparameter werden als JSON-Datenstrukturen gesendet. Diese Zugriffstoken können kryptografisch signiert werden und sind die bevorzugte Methode zur Steuerung des Zugriffs auf REST-APIs. Im OWASP JWT-Spickzettel finden Sie einen schnellen Überblick über JSON-Webtoken und in RFC 7519 die vollständige Spezifikation.
  • OAuth: Standard-OAuth 2.0-Mechanismen können zur Authentifizierung und Autorisierung verwendet werden. OpenID Connect ermöglicht eine sichere Authentifizierung über OAuth 2.0. Die APIs von Google verwenden beispielsweise OAuth 2.0 für die Authentifizierung und Autorisierung.

Benutzerautorisierung mit API-Schlüsseln

API-Schlüssel bieten eine Möglichkeit, den Zugriff auf öffentliche REST-Dienste zu steuern. Betreiber öffentlicher Webdienste können API-Schlüssel verwenden, um die Ratenbegrenzung für API-Aufrufe durchzusetzen und Denial-of-Service-Angriffe zu mildern. Für monetarisierte Dienste können Organisationen API-Schlüssel verwenden, um Zugriff basierend auf dem erworbenen Zugriffsplan bereitzustellen.

API-Client-Einschränkungen

Um Sicherheitsrisiken zu minimieren, sollten REST-Service-Betreiber die Verbindung von Clients auf die für den Dienst erforderlichen Mindestfunktionen beschränken. Dies beginnt mit der Einschränkung unterstützter HTTP-Methoden, um sicherzustellen, dass falsch konfigurierte oder böswillige Clients keine Aktionen ausführen können, die über die API-Spezifikation und die zulässige Zugriffsebene hinausgehen. Wenn die API beispielsweise nur GET-Anforderungen zulässt, sollten POST und andere Anforderungstypen mit der Antwortcode 405-Methode nicht zulässig abgelehnt werden.

Schützen von Anwendungen, die APIs verfügbar machen

Sobald der Client legitimen Zugriff hat, müssen Sie die zugrunde liegende Webanwendung vor fehlerhaften und böswilligen Eingaben schützen. REST-API-Aufrufe und -Antworten können auch vertrauliche Daten enthalten, die kontrolliert werden müssen.

Vertrauliche Daten in der API-Kommunikation

API-Aufrufe enthalten häufig Anmeldeinformationen, API-Schlüssel, Sitzungstoken und andere vertrauliche Informationen. Wenn sie direkt in URLs enthalten sind, können diese Details in Webserverprotokollen gespeichert und durchgesickert sein, wenn Cyberkriminelle auf die Protokolle zugreifen. Um zu vermeiden, dass vertrauliche Informationen verloren gehen, sollten RESTful-Webdienste sie immer in HTTP-Anforderungsheadern oder im Anforderungstext senden (für POST- und PUT-Anforderungen).

Validierung des Inhaltstyps

In Fortsetzung des Themas API-Client-Einschränkungen sollten REST-Dienste zulässige Inhaltstypen genau definieren und Anforderungen ablehnen, die nicht die richtigen Deklarationen in ihren HTTP-Headern enthalten. Dies bedeutet, dass zulässige Typen sowohl im Header Content-Type als auch im Header Accept zusammen mit dem Zeichensatz (wo möglich) sorgfältig angegeben werden. Wenn der Dienst JavaScript (oder anderen Skriptcode) enthält, sollte sichergestellt werden, dass der Inhaltstyp im Header mit dem im Anforderungstext übereinstimmt, z. B. application/javascript. Dies hilft, Header-Injection-Angriffe zu verhindern.

Antwortsicherheitsheader

Zusätzliche HTTP-Sicherheitsheader können festgelegt werden, um Art und Umfang der Anforderungen weiter einzuschränken. Dazu gehören X-Content-Type-Options: nosniff, um XSS-Angriffe basierend auf MIME-Sniffing zu verhindern, und X-Frame-Options: deny, um Clickjacking-Versuche in älteren Browsern zu verhindern.

Wenn der Dienst domänenübergreifende Aufrufe nicht unterstützt, sollte er CORS (Cross-Origin Resource Sharing) in seinen Antwortheadern deaktivieren. Wenn solche Aufrufe erwartet werden, sollten die CORS-Header die zulässigen Ursprünge genau angeben.

Eingabevalidierung

APIs sind für den automatisierten Zugriff ohne Benutzerinteraktion konzipiert. Alle Anfragen, die nicht der API-Spezifikation entsprechen, müssen abgelehnt werden. Es gelten typische Best-Practice-Richtlinien für die Eingabevalidierung:

  • Behandeln Sie alle Parameter, Objekte und andere Eingabedaten als nicht vertrauenswürdig.
  • Verwenden Sie die integrierte Validierungsfunktion, sofern verfügbar.
  • Überprüfen Sie die Anforderungsgröße sowie die Länge und den Typ des Inhalts.
  • Verwenden Sie starke Typisierung für API-Parameter (falls unterstützt).
  • Um SQL-Injection zu verhindern, vermeiden Sie das manuelle Erstellen von Abfragen – verwenden Sie stattdessen parametrisierte Abfragen.
  • Whitelist Parameterwerte und String-Eingaben, wo immer möglich.
  • Protokollieren Sie alle Eingabevalidierungsfehler, um Versuche zum Füllen von Anmeldeinformationen zu erkennen.

Warum REST-API-Sicherheit wichtig ist

Web-APIs sind das Rückgrat der modernen Web- und Mobilentwicklung. Sie ermöglichen Anwendungen und Diensten die Kommunikation und den Austausch von Daten über Hardware- und Softwareplattformen hinweg. Während andere API-Formate ebenfalls noch verwendet werden (z. B. SOAP), sind REST-APIs heute der dominierende Typ und machen über 80% aller öffentlichen Web-APIs aus. Sie bieten das Backend für die meisten mobilen Anwendungen und IoT-Geräte und ermöglichen eine einfache Integration über Systeme und Anwendungen hinweg.

Da sie dieselben Technologien wie Webanwendungen verwenden, können REST-APIs für dieselben Angriffe anfällig sein. Gleichzeitig sind APIs nicht für den manuellen Zugriff konzipiert, sodass sie schwer zu testen sind, insbesondere wenn einige Endpunkte und Features nicht dokumentiert sind. API-Sicherheitstests erfordern genaue automatisierte Tools, um eine vollständige Abdeckung zu gewährleisten. Netsparker bietet volle Unterstützung für das Scannen von REST-API-Schwachstellen mit einer Vielzahl von Authentifizierungsmethoden und automatischem URL-Rewriting.

Vollständige technische Details finden Sie in der Dokumentation der Netsparker REST API Test Site und in unserem vollständigen Artikel zum Scannen von REST-APIs auf Schwachstellen mit Netsparker.

 Zbigniew Banach

Über den Autor

Zbigniew Banach

Technischer Redakteur bei Netsparker. Mit seiner Erfahrung als IT-Journalist und technischer Übersetzer gibt er sein Bestes, um die Web-Sicherheit auf dem Netsparker-Blog und der Website einem breiteren Publikum zugänglich zu machen.

Bleiben Sie auf dem Laufenden über Web Security Trends

You might also like

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.