Zum Inhalt springen
Guide

OWASP API Security Top 10: Checkliste mit Korrekturen

| 12 min read

Gehen Sie alle 10 OWASP-API-Sicherheitsrisiken (Ausgabe 2023) mit echten Angriffsszenarien, konkreten Korrekturen und einer Checkliste zum Kopieren und Einfügen für Ihre Sicherheitsüberprüfung durch.

Cybersecurity command center with multiple monitoring screens
Photo by Adi Goldstein on Unsplash

Ihre API bedient 10.000 Anfragen pro Stunde. Drei dieser Anfragen stammen von einem Angreifer, der sich ändert ein order_id Parameter und lädt jeden Kundendatensatz in Ihrer Datenbank herunter. Du findest wenn Ihre Nutzer es tun, auf Twitter.

Die OWASP API Security Top 10 (Ausgabe 2023) katalogisiert die zehn Risiken, die für die meisten Risiken verantwortlich sind API-Verstöße. In diesem Leitfaden wird jedes Risiko mit einer Erklärung in einem Absatz und einem realistischen Angriff erläutert Szenario und eine konkrete Lösung. Wo ein Botoi-API-Endpunkt Ihnen hilft, das Risiko zu erkennen oder zu verhindern, das Der relevante Endpunkt ist in einer funktionierenden Datei enthalten curl Befehl.

API1:2023 Defekte Autorisierung auf Objektebene (BOLA)

BOLA tritt auf, wenn eine API Daten basierend auf einer Objekt-ID zurückgibt, ohne zu prüfen, ob die Anforderung vorliegt Der Benutzer besitzt dieses Objekt. Ein Angreifer ruft GET /api/orders/1001, ruft Daten ab und iteriert dann durch 1002, 1003, und so weiter. Jeder Datensatz in der Tabelle ist jetzt verfügbar. BOLA gilt seit der ersten OWASP-API-Sicherheitsliste im Jahr 2019 als größtes API-Risiko.

Angriffsszenario: Eine Essensliefer-App enthüllt GET /api/orders/:id. Ein Angreifer schreibt eine Schleife von 1 bis 100.000 und lädt jede Bestellung herunter, einschließlich Lieferadressen, Telefonnummern und Angaben zur Zahlungsmethode.

Hier ist der anfällige Code:

// Vulnerable: no ownership check
app.get("/api/orders/:id", async (req, res) => {
  const order = await db.orders.findById(req.params.id);
  res.json(order); // Any user can read any order
});

Und hier ist die Lösung:

// Fixed: verify the requesting user owns the resource
app.get("/api/orders/:id", async (req, res) => {
  const order = await db.orders.findById(req.params.id);

  if (!order) return res.status(404).json({ error: "Not found" });
  if (order.userId !== req.user.id) {
    return res.status(403).json({ error: "Forbidden" });
  }

  res.json(order);
});

Jeder Endpunkt, der eine ID vom Client akzeptiert, benötigt eine Besitzüberprüfung. Keine Ausnahmen. Benutzen Middleware oder ein Abfragefilter (z. B. WHERE user_id = ?), um dies auf der Datenebene durchzusetzen.

API2:2023 Authentifizierung fehlerhaft

Eine fehlerhafte Authentifizierung umfasst schwache Token-Generierung, fehlende Token-Validierung und Credential Stuffing Angriffe und Endpunkte, die abgelaufene oder manipulierte Token akzeptieren. Angreifer zielen auf Anmeldeendpunkte ab Listen verletzter Zugangsdaten oder sie stehlen Token aus einem unsicheren Speicher.

Angriffsszenario: Ein Angreifer erhält eine Liste mit 10 Millionen E-Mail-/Passwort-Paaren von eine Datenpanne. Sie schreiben ein Skript, das jedes Paar mit Ihrem testet POST /api/login Endpunkt. Ihre API hat keine Ratenbegrenzung für Anmeldeversuche, sodass der Angreifer 2.000 Konten kompromittiert eine Stunde.

Fix: Erzwingen Sie eine Ratenbegrenzung für Authentifizierungsendpunkte (5 Versuche pro Minute und IP). Erfordern Sie eine Multi-Faktor-Authentifizierung für sensible Vorgänge. Überprüfen Sie die Benutzeranmeldeinformationen mit bekannten Sicherheitsverstöße, bevor Sie die Kontoerstellung zulassen.

Der botoi API zur Überprüfung von Verstößen sagt dir, ob Bei bekannten Datenschutzverletzungen tauchte eine E-Mail-Adresse auf:

curl -s -X POST https://api.botoi.com/v1/breach/check \\
  -H "Content-Type: application/json" \\
  -d '{
    "email": "user@example.com"
  }'

Antwort:

{
  "success": true,
  "data": {
    "breached": true,
    "count": 3,
    "breaches": [
      { "name": "ExampleCorp", "date": "2024-01-15", "dataTypes": ["email", "password"] },
      { "name": "DataDump2023", "date": "2023-08-22", "dataTypes": ["email", "username"] },
      { "name": "LeakedDB", "date": "2022-11-03", "dataTypes": ["email", "phone"] }
    ]
  }
}

Anruf /v1/breach/check während der Anmeldung oder beim Zurücksetzen des Passworts. Wenn die E-Mail in Verstößen auftaucht, Fordern Sie den Benutzer auf, ein stärkeres, eindeutiges Passwort auszuwählen und aktivieren Sie die Zwei-Faktor-Authentifizierung.

API3:2023 Autorisierung auf Objekteigenschaftenebene fehlerhaft

Dieses Risiko kombiniert Massenzuordnung und übermäßige Datenexposition. Die Massenzuweisung erfolgt, wenn eine API Bindet Anfragetextfelder ohne Filterung direkt an ein Datenmodell. Ein Benutzer sendet "role": "admin" in einer Profilaktualisierung und erhält erhöhte Berechtigungen. Übermäßige Datenexposition passiert, wenn eine API interne Felder (Datenbank-IDs, gehashte Passwörter, Admin-Flags) an den Client zurückgibt sollte nie sehen.

Angriffsszenario: Mit einer SaaS-App können Benutzer ihr Profil über aktualisieren PUT /api/users/:id. Das Backend akzeptiert den vollständigen Anfragetext und schreibt ihn in die Datenbank. Ein Angreifer fügt hinzu "plan": "enterprise" auf die Anfrage und erhält kostenlosen Zugang zu Premium-Funktionen.

Fix: Verwenden Sie explizite Zulassungslisten für beschreibbare Felder. Binden Sie niemals rohe Anfragedaten an Ihre Datenmodell. Verwenden Sie separate Antwort-DTOs, die interne Felder ausschließen. Validieren Sie jede eingehende Eigenschaft vor der Verarbeitung mit einem Schema vergleichen.

API4:2023 Uneingeschränkter Ressourcenverbrauch

APIs, die unbegrenzte Anfragen akzeptieren, ermöglichen es Angreifern, Ihre Infrastrukturrechnung in die Höhe zu treiben und Ihre Datenbank zu erschöpfen Verbindungen zerstören oder einen Denial-of-Service auslösen. Dies gilt für fehlende Ratengrenzen und unbegrenzte Abfragen Parameter (z. B. ?limit=1000000), Datei-Uploads ohne Größenbeschränkung und Endpunkte teure Hintergrundjobs auslösen.

Angriffsszenario: Ein API-Endpunkt generiert PDF-Berichte. Ein Angreifer sendet 500 gleichzeitige Anfragen, bei denen jeweils ein 200-seitiger Bericht angefordert wird. Ihr Arbeitskräftepool ist voll und legitim Benutzer erhalten in den nächsten 20 Minuten 503-Fehler.

Fix: Fügen Sie eine Ratenbegrenzung pro Benutzer und pro IP hinzu. Begrenzen Sie die Paginierungsgrenzen serverseitig Höchstwerte. Legen Sie Größenbeschränkungen für Datei-Uploads fest. Nutzen Sie die warteschlangenbasierte Verarbeitung für teure Vorgänge.

// Express rate limiter per user
import rateLimit from "express-rate-limit";

const apiLimiter = rateLimit({
  windowMs: 60 * 1000, // 1 minute
  max: 30,             // 30 requests per minute per IP
  standardHeaders: true,
  legacyHeaders: false,
  message: { error: "Rate limit exceeded. Try again in 60 seconds." },
});

app.use("/api/", apiLimiter);

API5:2023 Autorisierung auf Funktionsebene fehlerhaft

Durch Autorisierungsfehler auf Funktionsebene können normale Benutzer Administratorendpunkte aufrufen. Das typische Muster: an Admin-Panel-Aufrufe DELETE /api/admin/users/:id. Das Frontend verbirgt den Button vor Nicht-Administratorbenutzer, aber der API-Endpunkt selbst überprüft keine Rollen. Jeder authentifizierte Benutzer, der entdeckt, dass die URL Konten löschen kann.

Angriffsszenario: Ein Entwickler findet /api/admin/export-all-users im JavaScript-Bundle. Sie rufen es mit ihrem regulären Benutzertoken auf und laden den vollständigen Benutzer herunter Datenbank.

Fix: Überprüfen Sie die Rolle des Benutzers auf der API-Ebene für jeden Admin-Endpunkt. Verlassen Sie sich nicht darauf das Frontend, um Funktionen auszublenden. Gruppenadministratorrouten hinter Middleware, die die Überprüfung durchführt role === "admin" vor der Bearbeitung der Anfrage.

API6:2023 Uneingeschränkter Zugriff auf sensible Geschäftsabläufe

Einige API-Abläufe sind im großen Maßstab gefährlich, selbst wenn jede einzelne Anfrage autorisiert ist. Kaufen Artikel mit begrenztem Lagerbestand, Erstellung kostenloser Testkonten, Übermittlung von Empfehlungscodes; diese Ströme Pause, wenn automatisiert. Ein Bot eröffnet 10.000 kostenlose Konten oder kauft jedes Ticket in einem Flash-Sale bevor ein echter Benutzer die Seite lädt.

Angriffsszenario: Ein Sneaker-Reseller schreibt einen Bot, der anruft POST /api/checkout 500 Mal in der ersten Sekunde eines begrenzten Drops. Jedes Paar verkauft sich zu Bots. Menschliche Kunden sehen „ausverkauft“, bevor die Seite vollständig geladen ist.

Fix: Fügen Sie CAPTCHA- oder Proof-of-Work-Herausforderungen zu hochwertigen Flows hinzu. Gerät verfolgen Fingerabdrücke zur Erkennung von Automatisierung. Legen Sie Kauflimits pro Benutzer fest. Verwenden Sie den warteschlangenbasierten Zugriff für Flash-Sales anstelle von „Wer zuerst kommt, mahlt zuerst“-Endpunkten.

API7:2023 Serverseitige Anforderungsfälschung (SSRF)

SSRF geschieht, wenn eine API eine URL vom Client akzeptiert und sie serverseitig ohne abruft Validierung des Ziels. Ein Angreifer stellt bereit http://169.254.169.254/latest/meta-data/ und Ihr Server gibt die Anmeldeinformationen der AWS-Instanz zurück. Oder sie zielen darauf ab http://localhost:6379/ und interagieren Sie mit Ihrer Redis-Instanz.

Angriffsszenario: Bei einer Webhook-Integration können Benutzer eine Rückruf-URL angeben. Ein Angreifer setzt den Rückruf auf http://169.254.169.254/latest/meta-data/iam/security-credentials/ und erhält die IAM-Rollenanmeldeinformationen Ihres Cloud-Anbieters in der Webhook-Nutzlast.

// Block internal network requests
const BLOCKED_RANGES = [
  /^10\\./, /^172\\.(1[6-9]|2\\d|3[01])\\./, /^192\\.168\\./,
  /^127\\./, /^0\\./, /^169\\.254\\./,
  /^localhost$/i, /^\\[::1\\]$/,
];

function isSafeUrl(urlString) {
  try {
    const url = new URL(urlString);
    const hostname = url.hostname;
    return !BLOCKED_RANGES.some((re) => re.test(hostname));
  } catch {
    return false;
  }
}

app.post("/api/fetch-url", async (req, res) => {
  const { url } = req.body;
  if (!isSafeUrl(url)) {
    return res.status(400).json({ error: "URL targets a blocked network range" });
  }
  // proceed with external fetch
});

Fix: Ziel-URLs validieren und auf die Zulassungsliste setzen. Blockieren Sie private IP-Bereiche und Cloud Metadaten-Endpunkte. Lösen Sie DNS auf, bevor Sie die Anfrage stellen, um eine erneute DNS-Bindung zu verhindern. Ausgehend ausführen Anfragen von einem isolierten Netzwerksegment.

API8:2023 Sicherheitsfehlkonfiguration

Fehlkonfiguration ist die umfassendste Risikokategorie. Es enthält fehlende CORS-Einschränkungen und ausführliche Fehler Nachrichten, die Stack-Traces preisgeben, Standardanmeldeinformationen in Admin-Panels, unnötige HTTP-Methoden aktiviert, TLS wird nicht erzwungen und es fehlen Sicherheitsheader. Jede einzelne Fehlkonfiguration schafft einen Einstiegspunkt.

Angriffsszenario: Eine API gibt vollständige Stack-Traces in Produktionsfehlerantworten zurück. Ein Angreifer löst absichtlich Fehler aus, liest die Stack-Traces aus, identifiziert die ORM- und Datenbankversion, erstellt dann eine Injektionsnutzlast basierend auf bekannten Schwachstellen in dieser Version.

Fix: Entfernen Sie Stapelspuren aus Produktionsantworten. Stellen Sie CORS so ein, dass nur Ihre Domänen zugelassen werden. Deaktivieren Sie HTTP-Methoden, die Sie nicht verwenden. Setzen Sie TLS überall durch. Führen Sie automatisierte Sicherheits-Header-Prüfungen durch. Bereinigen Sie alle HTML-Ausgaben, um XSS zu verhindern.

Der veröffentlichte HTML-Bereinigungs-API Streifen bösartige Tags und Attribute aus vom Benutzer bereitgestelltem HTML:

curl -s -X POST https://api.botoi.com/v1/html-sanitize \\
  -H "Content-Type: application/json" \\
  -d '{
    "html": "<p>Hello</p><script>document.cookie</script><img onerror=alert(1) src=x>"
  }'

Antwort:

{
  "success": true,
  "data": {
    "sanitized": "<p>Hello</p><img src=\\"x\\">"
  }
}

Der <script> Tag und die onerror Attribut werden entfernt. Das sichere HTML wird zurückgegeben. Rufen Sie diesen Endpunkt auf, bevor Sie vom Benutzer bereitgestelltes HTML speichern oder rendern.

API9:2023 Unsachgemäße Bestandsverwaltung

Alte API-Versionen, vergessene Staging-Endpunkte und undokumentierte Routen schaffen Angriffsfläche für Sie nicht überwachen. Angreifer suchen nach /v1/, /v2/, /api-dev/, Und /internal/ Wege. Sie finden einen veralteten Endpunkt, dem die Sicherheitskontrollen fehlen Sie haben zur aktuellen Version hinzugefügt.

Angriffsszenario: Ihr Team hat versendet /v2/users mit rollenbasiertem Zugriff Kontrolle. Aber /v1/users läuft immer noch ohne Genehmigung in der Produktion. Ein Angreifer Ermittelt den v1-Pfad über eine öffentliche Swagger-Datei und ruft die gesamte Benutzertabelle ab.

Fix: Pflegen Sie ein vollständiges API-Inventar. Alte Versionen außer Betrieb nehmen; verlass sie nicht läuft „für den Fall, dass jemand sie noch verwendet.“ Schützen Sie jede Version hinter derselben Authentifizierungs-Middleware. Scannen Ihre eigene Infrastruktur für exponierte Wege in regelmäßigen Abständen.

API10:2023 Unsicherer Verbrauch von APIs

Ihre API ruft Dienste von Drittanbietern auf: Zahlungsabwickler, E-Mail-Anbieter, Geokodierungs-APIs. Wenn Sie Wenn Sie ihren Antworten ohne Validierung vertrauen, kann ein kompromittierter oder böswilliger Dritter Daten einschleusen in Ihr System ein. Dazu gehört das Vertrauen von Weiterleitungs-URLs, das Parsen von nicht validiertem JSON oder das Speichern Antworten Dritter ohne Bereinigung.

Angriffsszenario: Ihre App ruft Unternehmensdaten von einer Anreicherungs-API eines Drittanbieters ab und speichert die company_name Feld direkt in Ihrer Datenbank. Die Anreicherungs-API erhält kompromittiert und der Angreifer injiziert <script> Tags in Firmennamen. Jeder Ein Benutzer, der ein Unternehmensprofil in Ihrem Dashboard anzeigt, führt das Skript aus.

Fix: Überprüfen und bereinigen Sie alle Antworten von Drittanbietern, bevor Sie sie speichern oder rendern sie. Verwenden Sie die Schemavalidierung für eingehende Daten. Legen Sie Timeouts für externe Anrufe fest. Wenden Sie die gleiche Eingabe an Validierung von Daten Dritter, die Sie auf Benutzereingaben anwenden.

Erkennen Sie die Offenlegung sensibler Daten in Ihren API-Antworten

Die Risiken API1 und API3 führen häufig dazu, dass sensible Daten Ihre API verlassen. Der botoi PII-Erkennungs-API scannt Text nach Sozialversicherungsnummern, Kreditkartennummern, E-Mail-Adressen, Telefonnummern, IP-Adressen usw Geburtsdaten. Führen Sie es in Integrationstests mit Ihren API-Antwortkörpern aus, um versehentliche Fehler zu erkennen Datenlecks vor der Bereitstellung.

curl -s -X POST https://api.botoi.com/v1/pii/detect \\
  -H "Content-Type: application/json" \\
  -d '{
    "text": "Customer SSN is 123-45-6789 and card is 4111111111111111"
  }'

Antwort:

{
  "success": true,
  "data": {
    "found": true,
    "count": 2,
    "findings": [
      {
        "type": "ssn",
        "value": "123-45-6789",
        "start": 17,
        "end": 28,
        "masked": "***-**-6789"
      },
      {
        "type": "credit_card",
        "value": "4111111111111111",
        "start": 42,
        "end": 58,
        "masked": "************1111"
      }
    ]
  }
}

Wenn Ihre API-Antwort Ergebnisse auslöst, gibt Ihr Endpunkt Daten zurück, die der Client nicht sehen sollte. Korrigieren Sie die Abfrage oder das DTO, um diese Felder auszuschließen.

Verschlüsseln Sie vertrauliche Daten im Ruhezustand

Wenn Ihre API vertrauliche Konfigurationen, Token oder Anmeldeinformationen speichert, verschlüsseln Sie diese vor dem Schreiben zur Datenbank. Der Botoi-Verschlüsselungs-API bietet AES-256-CBC-Verschlüsselung:

curl -s -X POST https://api.botoi.com/v1/encrypt/encrypt \\
  -H "Content-Type: application/json" \\
  -d '{
    "text": "sensitive-api-token-abc123",
    "password": "your-secret-key"
  }'

Antwort:

{
  "success": true,
  "data": {
    "encrypted": "U2FsdGVkX1+abc...encrypted_output_here",
    "algorithm": "aes-256-cbc"
  }
}

Speichern Sie die verschlüsselte Ausgabe. Entschlüsseln mit /v1/encrypt/decrypt nur wenn der Wert ist benötigt. Dadurch wird der Explosionsradius begrenzt, wenn ein Angreifer über einen Lesezugriff auf Ihre Datenbank erhält BOLA- oder SQL-Injection-Schwachstelle.

Die OWASP-API-Sicherheits-Top-10-Checkliste

Drucken Sie diese Tabelle aus oder fügen Sie sie Ihrer Sicherheitsüberprüfungsvorlage hinzu. Überprüfen Sie jedes Element vor jeder API-Veröffentlichung.

Risiko Überprüfen Botoi-Endpunkt
API1 WAR Jeder Endpunkt, der eine Objekt-ID akzeptiert, überprüft den Besitz
API2 defekte Authentifizierung Begrenzte Anmelderate; Token verfallen; MFA für sensible Operationen /v1/breach/check
API3-Eigenschaftsauthentifizierung Anforderungsfelder auf der Zulassungsliste; Antwort-DTOs schließen Interna aus /v1/pii/detect
API4-Ressourcenlimit Ratenbeschränkungen, Paginierungsobergrenzen und Dateigrößenbeschränkungen werden durchgesetzt
API5-Funktionsauthentifizierung Admin-Endpunkte prüfen die Rolle auf API-Ebene, nicht im Frontend
API6-Geschäftsablauf CAPTCHA/Proof-of-Work für hochwertige Flows; Limits pro Benutzer
API7 SSRF Vom Benutzer bereitgestellte URLs validiert; private Bereiche gesperrt
API8-Fehlkonfiguration Keine Stapelspuren; CORS eingeschränkt; HTML bereinigt /v1/html-sanitize
API9-Inventar Alte API-Versionen außer Betrieb genommen; Alle Routen dokumentiert
API10 Unsicherer Konsum Antworten von Drittanbietern werden vor der Speicherung validiert und bereinigt /v1/html-sanitize

Wohin von hier aus?

Die vollständige OWASP API Security Top 10-Dokumentation finden Sie unter owasp.org/API-Security. Jede Risikoseite enthält Erkennungsmethoden, Beispielangriffsszenarien und Verweise auf CWEs.

Für automatisierte Prüfungen integrieren Sie die oben genannten Botoi-Endpunkte in Ihre CI-Pipeline. Führen Sie die PII-Erkennung aus gegen API-Antwortvorrichtungen. Bereinigen Sie gespeichertes HTML beim Schreiben. Überprüfen Sie die E-Mails neuer Benutzer auf Verstöße Datenbanken während der Anmeldung. Hierbei handelt es sich um kleine Ergänzungen zu Ihrer Testsuite, die die Risikoscanner erfassen Fräulein.

FAQ

Was sind die Top 10 der OWASP-API-Sicherheit?
Die OWASP API Security Top 10 ist eine Liste der zehn kritischsten API-Sicherheitsrisiken, die vom Open Worldwide Application Security Project geführt wird. Die Ausgabe 2023 deckt fehlerhafte Autorisierung auf Objektebene, fehlerhafte Authentifizierung, fehlerhafte Autorisierung auf Objekteigenschaftsebene, uneingeschränkten Ressourcenverbrauch, fehlerhafte Autorisierung auf Funktionsebene, uneingeschränkten Zugriff auf sensible Geschäftsabläufe, serverseitige Anforderungsfälschung, Sicherheitsfehlkonfigurationen, unsachgemäße Bestandsverwaltung und unsichere Nutzung von APIs ab.
Wie oft werden die OWASP API Security Top 10 aktualisiert?
OWASP veröffentlichte die ersten API Security Top 10 im Jahr 2019 und aktualisierte sie im Jahr 2023. Es gibt keinen festen Update-Zeitplan. Das Projektteam sammelt Daten aus Sicherheitsvorfällen, Bug-Bounty-Berichten und Community-Beiträgen und veröffentlicht dann eine neue Ausgabe, wenn sich die Bedrohungslandschaft so stark ändert, dass dies gerechtfertigt ist.
Was ist BOLA und warum ist es das größte API-Risiko?
BOLA (Broken Object-Level Authorization) tritt auf, wenn ein API-Endpunkt eine Objekt-ID vom Client akzeptiert und Daten zurückgibt, ohne zu überprüfen, ob der anfordernde Benutzer Eigentümer dieses Objekts ist. Ein Angreifer ändert die ID in der Anfrage und greift auf die Daten eines anderen Benutzers zu. Es steht an erster Stelle, weil es häufig vorkommt, leicht auszunutzen ist und häufig vertrauliche Datensätze in großem Umfang preisgibt.
Können automatisierte Tools alle OWASP API Security Top 10-Risiken abfangen?
Nein. Automatisierte Scanner erkennen Fehlkonfigurationen (API8), fehlende Ratengrenzen (API4) und einige Injektionsmuster (über API8). Aber Autorisierungsfehler (API1, API3, API5) erfordern ein Verständnis der Geschäftslogik, das Scannern fehlt. Für eine vollständige Abdeckung sind manuelle Codeüberprüfungen, Penetrationstests und Prüfungen auf Architekturebene erforderlich.
Wie priorisiere ich, welche OWASP-API-Risiken zuerst behoben werden müssen?
Beginnen Sie mit API1 (BOLA) und API2 (Broken Authentication), da diese zu direkten Datenschutzverletzungen führen. Beheben Sie dann API4 (Unrestricted Resource Consumption), um Denial-of-Service zu verhindern. Arbeiten Sie anschließend die verbleibenden Risiken ab, basierend darauf, welche Endpunkte die sensibelsten Daten in Ihrer Anwendung verarbeiten.

Starte mit botoi zu entwickeln

150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.