API-Security erfordert einen systematischen Ansatz - von Design über Development bis Operations. Ein ungesicherter Endpoint kann die gesamte Anwendung kompromittieren. OWASP API Top 10 ist ein guter Ausgangspunkt, aber nicht alles - jede API hat eine einzigartige Angriffsfläche.”

Freitagabend. Security-Team bekommt einen Alert: ungewöhnliches Traffic-Muster auf API. Analyse zeigt: Angreifer hat Endpoint /api/users/{id} gefunden, der Daten für jeden Nutzer per ID zurückgibt. Iteriert durch Millionen IDs, scrapt die gesamte Nutzerdatenbank. BOLA (Broken Object Level Authorization) - Endpoint prüft nicht, ob der anfragende Nutzer das Recht hat, die Daten dieses spezifischen Nutzers zu sehen.

Lesen Sie auch: Phishing im KI-Zeitalter 2026: Wie erkennt und verteidigt ma

Daten von 3 Millionen Nutzern geleakt. DSGVO-Breach-Meldung. Strafe, Reputation, Klagen. Und alles, was es brauchte, war eine Prüfung: “Hat User X das Recht auf Objekt Y?”

API ist überall. Mobile Apps kommunizieren mit Backend über API. Single Page Applications - über API. Microservices - API. Third-Party-Integrationen - API. IoT-Geräte - API. API ist die Hauptangriffsfläche moderner Anwendungen. Und oft am wenigsten geschützt.

Warum ist API-Security schwieriger als traditionelle Web-Security?

APIs haben keine “Login-Seite”. Traditionelle Web-App: Es gibt Login-Formular, es gibt Session, es gibt Cookies. API: Bearer Token, API Key, JWT - verschiedene Mechanismen, verschiedene Schwachstellen.

Machine-to-Machine-Kommunikation. APIs dienen oft anderen Systemen, nicht Menschen. Schwieriger, traditionelle Anti-Automatisierungs-Maßnahmen (CAPTCHA) anzuwenden.

Scale und Velocity. API verarbeitet tausende Requests pro Sekunde. Angriffe können subtil sein - nicht DDoS, sondern langsame Datenextraktion über Monate.

Dokumentation als Angriffsfläche. OpenAPI/Swagger-Specs sind öffentlich. Angreifer weiß genau, welche Endpoints existieren, welche Parameter sie akzeptieren.

Business-Logic-Exposition. API exponiert Business-Logic direkt. Web-App kann Logik hinter UI verstecken - API hat keine solche Schicht.

Mehrere Consumer. Eine API bedient: Mobile App, Web App, Third-Party-Integrationen, interne Services. Jeder hat andere Sicherheitsbedürfnisse.

Was sind die wichtigsten Bedrohungen laut OWASP API Top 10?

API1: Broken Object Level Authorization (BOLA) - API prüft nicht, ob Nutzer das Recht auf ein spezifisches Objekt hat. /api/orders/123 - kann Nutzer Order 123 sehen, oder nur seine eigenen?

API2: Broken Authentication - schwache Authentifizierungsmechanismen: schwache Tokens, kein Ablauf, Credential-Stuffing-Anfälligkeit.

API3: Broken Object Property Level Authorization - Nutzer kann Objekt sehen, aber nicht alle Felder, oder kann Felder modifizieren, die er nicht sollte.

API4: Unrestricted Resource Consumption - keine Limits: Rate Limiting, Payload-Größe, Query-Komplexität. Führt zu DoS, exzessiven Kosten.

API5: Broken Function Level Authorization - Nutzer ruft Admin-Funktionen (/api/admin/delete-user) auf, die nicht für ihn bestimmt sind.

API6: Unrestricted Access to Sensitive Business Flows - Automatisierung von Geschäftsoperationen (Massen-Ticketkauf, Credential Stuffing, Scraping).

API7: Server Side Request Forgery (SSRF) - API akzeptiert URL vom Nutzer und macht Request - Angreifer kann internes Netzwerk scannen.

API8: Security Misconfiguration - Standard-Configs, verbose Errors, unnötige HTTP-Methoden, fehlende Security-Header.

API9: Improper Inventory Management - alte API-Versionen noch zugänglich, undokumentierte Endpoints, veraltete Features nicht deaktiviert.

API10: Unsafe Consumption of APIs - Ihre API konsumiert Third-Party-APIs ohne ordentliche Validierung - Supply-Chain-Risiko.

Wie implementiert man ordentliche Authentication für API?

OAuth 2.0 + OpenID Connect. Standard für delegierte Authorization und Authentication. Nutzen Sie bewährte Implementierungen (Auth0, Okta, Keycloak), nicht selbst bauen.

JWT (JSON Web Tokens) Best Practices:

  • Starken Signaturalgorithmus verwenden (RS256 > HS256 für öffentliche Clients)
  • Kurze Ablaufzeiten (15 Min Access Token + Refresh Token Flow)
  • Signatur, Ablauf, Issuer, Audience validieren
  • Signing Keys sicher speichern (HSM, KMS)
  • Token Binding / Proof of Possession erwägen

API Keys - wann verwenden:

  • Service-to-Service-Authentication (nur serverseitig)
  • Aufrufende Anwendung identifizieren (nicht Nutzer)
  • Immer über HTTPS
  • Regelmäßig rotieren
  • Scope und Rate Limit pro Key

Nicht tun:

  • Basic Auth (außer über HTTPS und für Legacy-Support)
  • Custom Token-Schemata ohne Krypto-Expertise
  • Langlebige Tokens ohne Refresh-Mechanismus
  • Tokens in URLs (werden geloggt, gecacht, in Referrern geleakt)

Multi-Faktor für sensitive Operationen. Token gibt Zugang, aber für DELETE /api/account zusätzliche Verifizierung verlangen.

Wie implementiert man Authorization auf Objekt- und Funktionsebene?

Object Level Authorization (vs. BOLA):

# Schlecht - gibt jede Order per ID zurück
def get_order(order_id):
    return Order.find(order_id)

# Gut - prüft Ownership
def get_order(order_id, current_user):
    order = Order.find(order_id)
    if order.user_id != current_user.id:
        raise AuthorizationError("Not your order")
    return order

Function Level Authorization (vs. BFLA):

# Schlecht - jeder kann aufrufen
@app.route('/api/admin/users', methods=['DELETE'])
def delete_user(user_id):
    User.delete(user_id)

# Gut - prüft Rolle
@app.route('/api/admin/users', methods=['DELETE'])
@require_role('admin')
def delete_user(user_id):
    User.delete(user_id)

Property Level Authorization:

# Verschiedene Felder basierend auf Rolle zurückgeben
def serialize_user(user, requester):
    data = {'id': user.id, 'name': user.name}
    if requester.is_admin:
        data['email'] = user.email
        data['last_login'] = user.last_login
    return data

Policy Engines verwenden. OPA (Open Policy Agent), Casbin - Authorization-Logik externalisieren. Zentralisiert, testbar, auditierbar.

Wie implementiert man Rate Limiting und Throttling?

Rate-Limiting-Strategien:

  • Pro Nutzer/API Key (authentifizierte Requests)
  • Pro IP (unauthentifiziert / als Fallback)
  • Pro Endpoint (sensitive Endpoints strenger)
  • Sliding Window vs. Fixed Window

Beispiel-Tiers:

  • Anonym: 100 Requests/Stunde
  • Basic-Nutzer: 1000 Requests/Stunde
  • Premium: 10000 Requests/Stunde
  • Interner Service: höhere Limits mit Monitoring

Implementierungsoptionen:

  • API Gateway (Kong, Apigee, AWS API Gateway)
  • Reverse Proxy (nginx, HAProxy)
  • Application-Level (redis-basierte Counter)
  • Cloud-native (AWS WAF, Cloudflare)

Response-Handling:

  • 429 Too Many Requests zurückgeben
  • Retry-After Header einschließen
  • Limit im Response Body erklären
  • Exponential Backoff in Clients erwägen

Über Request Rate hinaus:

  • Payload-Größen-Limits
  • Query-Komplexitäts-Limits (GraphQL)
  • Concurrent Connections Limit
  • Kostenbasiertes Limiting (teure Operationen)

Wie validiert man Input und schützt vor Injection?

Alles validieren:

  • Schema-Validierung (JSON Schema, OpenAPI-Validierung)
  • Typprüfung (String, Integer, Email, UUID)
  • Längenlimits
  • Erlaubte Werte (Enums)
  • Format-Validierung (Regex mit Vorsicht)

Output sanitizen/escapen, nicht Input. Prinzip: Input strikt validieren, Output für Kontext encodieren (HTML, SQL, Shell).

SQL Injection via API:

# Schlecht - String-Konkatenation
query = f"SELECT * FROM users WHERE name = '{name}'"

# Gut - parametrisierte Queries
query = "SELECT * FROM users WHERE name = %s"
cursor.execute(query, (name,))

NoSQL Injection (MongoDB):

# Schlecht - akzeptiert Objekt vom Nutzer
db.users.find(request.json)  # Nutzer sendet {"$gt": ""}

# Gut - erwartete Struktur validieren
name = request.json.get('name')
if not isinstance(name, str):
    raise ValidationError()
db.users.find({'name': name})

Command Injection:

# Schlecht - Nutzereingabe in Shell
os.system(f"ping {user_input}")

# Gut - Libraries verwenden, nicht Shell
import subprocess
subprocess.run(['ping', '-c', '1', validated_hostname], check=True)

Wie schützt man API vor SSRF?

SSRF-Szenario: API akzeptiert URL-Parameter, fetcht Resource:

# Verwundbar
@app.route('/api/fetch')
def fetch_url():
    url = request.args.get('url')
    return requests.get(url).content  # Angreifer: url=http://169.254.169.254/

Mitigationen:

  • Erlaubte Domains/IPs whitelisten
  • Private IP-Ranges blockieren (10.x, 192.168.x, 169.254.x, 127.x)
  • Cloud-Metadata-Endpoints blockieren (169.254.169.254)
  • DNS-Auflösung verwenden und aufgelöste IP vor Verbindung prüfen
  • Redirects deaktivieren oder Redirect-Ziele validieren
  • Egress-Proxy mit Einschränkungen verwenden
# Besser
ALLOWED_HOSTS = ['api.trusted.com', 'cdn.trusted.com']
def fetch_url(url):
    parsed = urlparse(url)
    if parsed.hostname not in ALLOWED_HOSTS:
        raise SecurityError("Host not allowed")
    # Zusätzlich: DNS auflösen, IP prüfen
    return requests.get(url, allow_redirects=False).content

Wie überwacht und erkennt man Angriffe auf API?

Logging-Essentials:

  • Alle Authentifizierungsversuche (Erfolg/Fehlschlag)
  • Authorization-Fehlschläge
  • Rate-Limit-Treffer
  • Error-Responses (4xx, 5xx-Muster)
  • Ungewöhnliche Muster (außerhalb Geschäftszeiten, ungewöhnliche Geolocations)

NICHT loggen:

  • Vollständige Credentials/Tokens
  • PII unnötigerweise
  • Sensitive Geschäftsdaten

Anomalie-Erkennung:

  • Baseline normaler Traffic-Muster
  • Bei Abweichungen alertieren (Volumen, Endpoints, User Agents)
  • Sequenzanalyse (ungewöhnliche API-Call-Sequenzen)

API-spezifisches Monitoring:

  • Authentication-Failure-Spikes (Credential Stuffing)
  • Sequentieller ID-Zugriff (BOLA-Exploitation)
  • Ungewöhnliches Datenvolumen pro Nutzer (Datenexfiltration)
  • Zugriff auf veraltete Endpoints

Tools:

  • API Gateways mit Analytics (Kong, Apigee)
  • SIEM-Integration (Splunk, ELK, Datadog)
  • Spezialisierte API-Security (Salt Security, Traceable, Noname Security)

Wie testet man API-Security?

DAST (Dynamic Application Security Testing):

  • OWASP ZAP (kostenlos, skriptfähig)
  • Burp Suite (professioneller Standard)
  • Postman Security Tests
  • API-spezifische Scanner (Astra, APIsec)

SAST für API-Code:

  • SonarQube-Regeln für API-Security
  • Semgrep Custom Rules
  • CodeQL-Queries

Manuelle Test-Checkliste:

  • Authorization-Testing (auf Ressourcen anderer Nutzer zugreifen)
  • Authentication-Bypass-Versuche
  • Injection-Testing (SQL, NoSQL, Command)
  • Rate-Limiting-Validierung
  • Error-Message-Information-Disclosure
  • Deprecated-Endpoint-Discovery
  • IDOR (Insecure Direct Object Reference) Testing

Fuzzing:

  • Ungültige Input-Typen
  • Grenzwerte
  • Malformed JSON/XML
  • Unicode-Grenzfälle

Penetration Testing:

  • Regelmäßige professionelle Pentests
  • Bug-Bounty-Programme für APIs
  • Red-Team-Übungen

Wie baut man einen sicheren API-Development-Lifecycle?

Design-Phase:

  • Threat Modeling für API
  • Authentication/Authorization-Anforderungen definieren
  • Rate-Limiting-Strategie planen
  • Für minimale Datenexposition designen

Development:

  • Secure-Coding-Richtlinien für API
  • Code Review mit Security-Fokus
  • Pre-Commit-Hooks für Secrets-Erkennung
  • Dependency-Scanning

Testing:

  • Security-Unit-Tests (Authorization-Logik)
  • Integration-Security-Tests
  • DAST in CI/CD-Pipeline
  • Manuelle Security-Review für sensitive Endpoints

Deployment:

  • Security-Configuration-Review
  • Secrets-Management (nicht im Code)
  • Nur HTTPS, ordentliche TLS-Config
  • API-Gateway-Security-Features aktiviert

Operations:

  • Continuous Monitoring
  • Incident-Response-Plan für API-Breaches
  • Regelmäßige Security-Assessments
  • Deprecation-Prozess für alte Versionen

Tabelle: API-Security-Checkliste

KategorieKontrollePrioritätWie prüfenTools
AuthenticationOAuth 2.0 / OIDC-ImplementierungKritischCode Review, PentestAuth0, Keycloak
AuthenticationJWT ordentliche ValidierungKritischUnit Tests, DASTjwt.io, Burp
AuthenticationToken-Ablauf < 15 MinHochConfig Review-
AuthorizationObject-Level-Access-ChecksKritischCode Review, PentestOPA, Casbin
AuthorizationFunction-Level-Access-ChecksKritischCode Review, PentestRollenbasierte Tests
AuthorizationProperty-Level-FilterungHochCode ReviewCustom Tests
Input-ValidierungSchema-ValidierungHochUnit Tests, FuzzingJSON Schema, AJV
Input-ValidierungSQL-Injection-PräventionKritischDAST, Code ReviewSQLMap, Burp
Rate LimitingPro-User/IP-LimitsHochLoad TestingAPI Gateway, Redis
Rate LimitingPayload-Größen-LimitsMittelConfig Reviewnginx, API Gateway
VerschlüsselungNur HTTPSKritischSSL Labs TestSSL Labs, testssl.sh
VerschlüsselungNur TLS 1.2+HochConfig Scannmap, SSL Labs
LoggingAuth-Events geloggtHochLog ReviewSIEM, ELK
LoggingKeine Secrets in LogsKritischLog Auditgrep, Log-Analyse
MonitoringAnomalie-ErkennungMittelAlert ReviewDatadog, spezialisierte Tools
InventoryAlle Endpoints dokumentiertHochAPI DiscoverySwagger, API-Katalog
InventoryAlte Versionen deprecatedMittelTraffic-AnalyseAPI Gateway Analytics

API-Security erfordert einen systematischen Ansatz - von Design über Development bis Operations. Ein ungesicherter Endpoint kann die gesamte Anwendung kompromittieren. OWASP API Top 10 ist ein guter Ausgangspunkt, aber nicht alles - jede API hat eine einzigartige Angriffsfläche.

Wichtige Erkenntnisse:

  • BOLA (Broken Object Level Authorization) ist die häufigste Schwachstelle - immer Ownership prüfen
  • Authentication ist nicht Authorization - Token haben ≠ Recht auf Resource haben
  • Rate Limiting schützt vor Abuse und DoS - auf mehreren Ebenen implementieren
  • Input-Validierung muss strikt sein - nichts von außen vertrauen
  • Monitoring ist entscheidend - Sie wissen nicht, dass Sie angegriffen werden, wenn Sie nicht schauen
  • API-Inventar - Sie müssen wissen, was Sie haben, um es zu schützen
  • Regelmäßig testen - automatisiert + manuell + Pentest

API-Security ist ein kontinuierlicher Prozess, kein einmaliges Projekt. Jeder neue Endpoint ist eine neue Angriffsfläche. Jede Änderung erfordert Security Review.

ARDURA Consulting stellt Security- und DevSecOps-Spezialisten über Body Leasing mit Erfahrung in der Absicherung von APIs für Enterprise-Anwendungen bereit. Unsere Experten helfen beim Design, der Implementierung und dem Testen sicherer APIs. Sprechen wir über die Absicherung Ihrer Schnittstellen.