APIs pruefen und absichern mit dem OWASP API Security Top 10
Bevor du beginnst
- Ein API-Inventar oder zumindest Zugriff auf Quellcode-Repositories, API-Gateway-Konfigurationen und Service-Dokumentation
- Dokumentation des Authentifizierungs- und Autorisierungsmodells fuer die zu pruefenden APIs
- Eine Test- oder Staging-Umgebung, in der Sie Anfragen sicher wiedergeben koennen
- Zugriffsprotokolle, Metriken oder Gateway-Telemetrie fuer die zu pruefenden APIs
- Grundlegender Zugriff auf Quellcode oder OpenAPI-Spezifikationen
Was du lernen wirst
- Ein echtes API-Inventar erstellen oder verifizieren, das oeffentliche, interne, Partner- und Schatten-APIs umfasst
- Objekt-Level-, Funktions-Level- und Tenant-Level-Autorisierung effektiver pruefen
- Eingabevalidierung, Schema-Durchsetzung und Mass-Assignment-artige Risiken ueberpruefen
- Rate Limits, Missbrauchskontrollen und Kostenverstaerkungspfade pruefen
- Sensible Datenexposition in Antworten, Logs, Debug-Routen und Drittanbieter-Aufrufen finden
- Audit-Ergebnisse in einen priorisierten Behebungsplan umwandeln, den Ihr Team tatsaechlich umsetzen kann
Auf dieser Seite
API-Sicherheit ist immer noch einer der schnellsten Wege, kompromittiert zu werden, weil APIs Geschaeftsfunktionen, Objekt-Identifikatoren, privilegierte Aktionen und sensible Daten auf eine Weise exponieren, die leicht im grossen Massstab automatisiert werden kann. Ein kleiner Autorisierungsfehler an einem Endpunkt kann oft ueber Tausende von IDs, Tenants oder Objekten repliziert werden. Deshalb sollte ein API-Review nicht bei “wir verwenden OAuth” oder “das Gateway hat Auth aktiviert” aufhoeren.
Moderne AI- und SaaS-Integrationen verschlimmern das Problem. Viele Teams nutzen mittlerweile Drittanbieter-APIs, als waeren sie vertrauenswuerdige interne Systeme, leiten AI-Prompts und -Ergebnisse durch API-Schichten und fuegen Partner-spezifische oder Beta-Endpunkte schneller hinzu, als das Inventar mithalten kann. Diese Kombination erzeugt genau die Art von Problemen, die OWASP bei unsachgemaessem Inventarmanagement, uneingeschraenktem Ressourcenverbrauch und unsicherer Nutzung von APIs hervorhebt.
Dieses Tutorial gibt Ihnen einen praktischen Audit-Workflow basierend auf den OWASP API Security Top 10. Sie werden ein nutzbares API-Inventar erstellen, Autorisierung und Tenant-Grenzen ueberpruefen, Schema- und Missbrauchskontrollen inspizieren, nach Datenexposition suchen, die betriebliche Sicherheit ueberpruefen und dann die Ergebnisse in einen Behebungsplan umwandeln, der die groessten Risiken zuerst behebt.
Schritt 1: API-Inventar erstellen oder verifizieren
Beginnen Sie nicht mit Schwachstellen-Scanning. Beginnen Sie mit Sichtbarkeit. Wenn Sie nicht wissen, welche APIs existieren, wem sie gehoeren, welche Version live ist und wer sie erreichen kann, befinden Sie sich bereits im API9-Territorium.
Inventarisieren Sie oeffentliche, interne, Partner- und Schatten-APIs
Erstellen Sie eine einzelne Inventardatei, die diese Fragen fuer jede API-Oberflaeche beantwortet:
- Was ist der Hostname oder Basispfad?
- Ist sie oeffentlich, intern, nur fuer Partner oder unbekannt?
- Wer ist der Eigentuemer?
- Welches Auth-Modell verwendet sie?
- In welcher Umgebung befindet sie sich?
- Gibt es einen dokumentierten Deprecation-Plan?
File: api-inventory.csv
service,base_url,audience,owner,environment,auth,openapi_spec,current_version,status
payments-api,https://api.example.com/payments,public,payments-team,production,oauth2,openapi/payments.yaml,v2,active
admin-api,https://admin-api.internal.example.com,internal,platform-team,production,jwt-rbac,openapi/admin.yaml,v1,active
partner-orders,https://partners.example.com/orders,partner,bizops-team,production,api-key-plus-hmac,openapi/partner-orders.yaml,v1,active
legacy-beta,https://beta-api.example.com,unknown,unknown,production,unknown,missing,v0,investigate
Ziehen Sie Inventar aus Code und Traffic, nicht nur aus Dokumentation
Dokumentation ist ein Ausgangspunkt, nicht die Wahrheit. Um undokumentierte oder veraltete Endpunkte zu finden, kombinieren Sie Quellcode-Suche und Zugriffsprotokolle.
Beispiel Quellcode-Suche:
grep -R "router\.\|app\.\|@RequestMapping\|@GetMapping\|@PostMapping" ./services
grep -R "openapi\|swagger" ./services
Beispiel log-abgeleitetes Inventar aus JSON-Zugriffsprotokollen:
jq -r '.host + "," + .method + "," + .path' access.log \
| sort -u \
| tee observed-routes.csv
Wenn Ihr Gateway Route-IDs oder Upstream-Service-Namen protokolliert, extrahieren Sie diese ebenfalls.
Markieren Sie Schatten- und veraltete APIs explizit
Ein echtes Audit braucht einen Bereich fuer Endpunkte, die Sie noch nicht vollstaendig verstehen. Zwingen Sie sie nicht in “intern” oder “sicher”, nur damit die Tabelle sauberer aussieht.
Erstellen Sie ein Review-Arbeitsblatt:
File: shadow-api-review.md
# Shadow API Review
## beta-api.example.com
- Owner: unknown
- Environment: production
- OpenAPI spec: missing
- Auth model: unknown
- Last seen in traffic: 2026-03-08
- Public DNS: yes
- Action: classify or remove within 7 days
Inventarisieren Sie Versionen und Datenfluesse
Inventarisieren Sie nicht nur Hostnamen. Verfolgen Sie auch Versionen und Datenfreigabepfade.
File: api-data-flows.yaml
payments-api:
inbound_clients:
- web-app
- mobile-app
outbound_dependencies:
- tax-provider
- fraud-provider
sensitive_data:
- customer-name
- partial-card-metadata
- billing-address
partner-orders:
inbound_clients:
- reseller-a
- reseller-b
outbound_dependencies:
- warehouse-api
sensitive_data:
- customer-email
- shipping-address
Sie sollten nun ein funktionierendes API-Inventar mit echten Routen, Zielgruppen, Versionen, Eigentuemern und Datenfluessen haben.
Schritt 2: Auth und Autorisierung pruefen
Dies ist der ertragreichste Teil des Audits. Die groessten API-Verletungen kommen normalerweise von fehlenden oder inkonsistenten Autorisierungspruefungen, nicht von exotischen Payloads.
Pruefen Sie Objekt-Level-Autorisierung
Objekt-Level-Autorisierung fragt: Kann dieser Aufrufer auf dieses spezifische Objekt zugreifen?
Wenn Ihre API einen Datensatz aus einer vom Benutzer angegebenen ID, UUID, Slug oder Fremdschluessel laedt, benoetigen Sie eine Eigentums- oder Policy-Pruefung nach dem Laden und vor der Rueckgabe oder Mutation des Objekts.
File: src/middleware/ownership.ts
import { Request, Response, NextFunction } from "express";
export function requireAccountOwnership(
fetchAccount: (accountId: string) => Promise<{ id: string; tenantId: string } | null>
) {
return async (req: Request, res: Response, next: NextFunction) => {
const accountId = req.params.accountId;
const account = await fetchAccount(accountId);
if (!account) {
return res.status(404).json({ error: "Not found" });
}
if (account.tenantId !== req.auth?.tenantId) {
return res.status(403).json({ error: "Forbidden" });
}
res.locals.account = account;
next();
};
}
Wenn Ihr Codepfad wie “ID aus Pfad lesen, Objekt laden, Objekt zurueckgeben” aussieht, aber nie Tenant oder Eigentum prueft, ist das ein Warnsignal.
Pruefen Sie Funktions-Level-Autorisierung
Funktions-Level-Autorisierung fragt: Kann dieser Aufrufer auf diese Funktion oder Aktion zugreifen?
Das schliesst Admin-Routen, Exporte, Bulk-Aktionen, Genehmigungsablaeufe und sensible Geschaeftsoperationen ein.
File: src/middleware/requireScope.ts
import { Request, Response, NextFunction } from "express";
export function requireScope(requiredScope: string) {
return (req: Request, res: Response, next: NextFunction) => {
const scopes = req.auth?.scopes ?? [];
if (!scopes.includes(requiredScope)) {
return res.status(403).json({ error: "Missing required scope" });
}
next();
};
}
Und verwenden Sie es dann konsistent:
app.post(
"/admin/users/:userId/suspend",
requireScope("admin:user:suspend"),
suspendUserHandler
);
Pruefen Sie Tenant-Trennung
Multi-Tenant-APIs sollten sich nicht nur auf eine vom Client uebermittelte Tenant-ID verlassen. Der Tenant-Kontext sollte aus verifizierten Auth-Claims oder serverseitigem Lookup kommen, nicht aus einem beliebigen Header, den der Client aendern kann.
Schlechtes Muster:
const tenantId = req.headers["x-tenant-id"];
Besseres Muster:
const tenantId = req.auth?.tenantId;
Verifizieren Sie dann, dass jeder Datenzugriffspfad durch diesen Tenant eingeschraenkt ist.
Pruefen Sie Token-Scope, Audience und Ablauf
Beantworten Sie fuer jeden Auth-Mechanismus:
- Hat der Token eine Audience-Pruefung?
- Sind Scopes oder Rollen eng genug?
- Ist der Ablauf vernuenftig?
- Werden Refresh-Tokens separat behandelt?
- Kann ein Token sowohl auf oeffentliche als auch auf Admin-APIs zugreifen?
Erstellen Sie eine einfache Auth-Matrix:
File: auth-matrix.yaml
payments-api:
auth_type: oauth2-jwt
audience: payments-api
scopes:
- payments:read
- payments:write
admin_scopes:
- payments:refund
max_access_token_lifetime_minutes: 15
admin-api:
auth_type: internal-jwt
audience: admin-api
scopes:
- admin:users:read
- admin:users:suspend
max_access_token_lifetime_minutes: 10
Sie sollten nun wissen, ob Ihre APIs Eigentum, aktionsbasierte Berechtigungen, Tenant-Grenzen und vernuenftige Token-Scope-Regeln durchsetzen.
Schritt 3: Eingabeverarbeitung und Schema-Kontrollen pruefen
In diesem Schritt finden Sie Mass-Assignment-artige Bugs, schwache Query-Validierung, unsicheres Parsing und Schema-Drift zwischen Dokumentation und tatsaechlichem Verhalten.
Validieren Sie Request-Bodies gegen ein Schema
Verlassen Sie sich nicht auf handgeschriebene if-Anweisungen, die ueber Controller verteilt sind. Verwenden Sie explizite Request-Schemas fuer Body, Pfadparameter und Query-Parameter.
File: src/validation/updateProfile.ts
import { z } from "zod";
export const updateProfileSchema = z.object({
displayName: z.string().min(1).max(80),
marketingOptIn: z.boolean().optional(),
});
File: src/middleware/validateBody.ts
import { AnyZodObject } from "zod";
import { Request, Response, NextFunction } from "express";
export function validateBody(schema: AnyZodObject) {
return (req: Request, res: Response, next: NextFunction) => {
const result = schema.safeParse(req.body);
if (!result.success) {
return res.status(400).json({
error: "Invalid request body",
details: result.error.flatten(),
});
}
req.body = result.data;
next();
};
}
Verhindern Sie Objekt-Property-Uebergriffe
Lassen Sie nur bekannte Properties durch. Binden Sie nicht beliebiges JSON direkt an ORM-Modelle oder Update-Objekte.
Schlechtes Muster:
await userRepository.update(req.params.userId, req.body);
Besseres Muster:
const allowed = {
displayName: req.body.displayName,
marketingOptIn: req.body.marketingOptIn,
};
await userRepository.update(req.params.userId, allowed);
Validieren Sie Query-Parameter und Paginierung
Query-Parameter sind auch Teil der Angriffsflaeche. Erzwingen Sie Bereiche und Defaults.
File: src/validation/listOrdersQuery.ts
import { z } from "zod";
export const listOrdersQuerySchema = z.object({
limit: z.coerce.number().int().min(1).max(100).default(25),
offset: z.coerce.number().int().min(0).default(0),
status: z.enum(["pending", "paid", "failed"]).optional(),
});
Pruefen Sie Deserialisierungs- und Parser-Verhalten
Markieren Sie jeden Endpunkt, der:
- rohe serialisierte Objekte ohne Schemavalidierung akzeptiert
- dynamisch Operatoren oder Feldnamen aus JSON interpretiert
- GraphQL-Queries mit schwachen Komplexitaetskontrollen akzeptiert
- unsichere Dateiformate oder Dokumenttransformationen akzeptiert
Gleichen Sie OpenAPI mit dem Live-Verhalten ab
Wenn Ihre OpenAPI-Spec sagt, dass nur displayName beschreibbar ist, der Endpunkt aber tatsaechlich isAdmin, tenantId oder accountBalance akzeptiert, haben Sie eine Spec-zu-Runtime-Luecke.
Ein sicherer Request-Schema-Ausschnitt sieht so aus:
File: openapi/profile.yaml
paths:
/v1/me/profile:
patch:
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
displayName:
type: string
maxLength: 80
marketingOptIn:
type: boolean
additionalProperties: false ist eine der einfachsten Moeglichkeiten, versehentliche Property-Level-Exposition zu reduzieren, wenn Ihr Tooling und Ihre Runtime es unterstuetzen. Sie sollten nun wissen, ob Ihre API Request-Schemas durchsetzt, beschreibbare Properties einschraenkt, Query-Parameter begrenzt und das Runtime-Verhalten mit dem dokumentierten Vertrag uebereinstimmt.
Schritt 4: Rate-Limiting und Missbrauchskontrollen pruefen
Hier ueberpruefen Sie sowohl klassischen API-Missbrauch als auch moderne Kostenverstaerkungspfade. Nicht jeder Missbrauchsfall ist Brute Force. Einige sind Paginierungsmissbrauch, Bulk-Export-Missbrauch, OTP-Flooding, AI-Token-Spend-Missbrauch oder Partner-Workflow-Automatisierung.
Erstellen Sie routenbasierte Rate-Profile
Wenden Sie nicht ein globales Limit auf alles an. Verschiedene Endpunkte brauchen verschiedene Kontrollen.
File: rate-limit-profile.yaml
routes:
/v1/auth/login:
limit_per_minute: 5
burst: 2
key: ip_plus_username
/v1/password/reset:
limit_per_hour: 3
key: account_identifier
/v1/orders/search:
limit_per_minute: 30
burst: 10
key: token_subject
/v1/ai/generate:
limit_per_minute: 10
burst: 2
key: tenant_id
Fuegen Sie implementierungsbasierte Limits hinzu
File: src/middleware/rateLimit.ts
import rateLimit from "express-rate-limit";
export const loginRateLimit = rateLimit({
windowMs: 60 * 1000,
max: 5,
standardHeaders: true,
legacyHeaders: false,
keyGenerator: (req) => `${req.ip}:${req.body.username ?? "unknown"}`,
});
Pruefen Sie Enumerationsschutz
Pruefen Sie, ob Angreifer kostenguenstig enumerieren koennen:
- Benutzer-IDs
- Konto-IDs
- Rechnungs-IDs
- E-Mail-Existenz
- Passwort-Reset-Flows
- Einladungs-Token
- Partner-Datensaetze
Suchen Sie nach inkonsistenten 404- vs. 403-Antworten, Timing-Unterschieden und verschiedenen Fehlerkoerpern fuer “existiert” versus “existiert nicht.”
Pruefen Sie Bot- und Geschaeftsprozess-Missbrauch
Identifizieren Sie Flows mit hohem Geschaeftswert:
- Gutscheinerstellung
- Testkontoerstellung
- Geschenkkarten-Einloesung
- Massen-Downloads
- Seat-Zuweisung
- AI-Generierungsendpunkte
- OTP- oder E-Mail-Sendeendpunkte
Fuegen Sie Kontrollen wie diese hinzu:
- routenspezifische Quoten
- Idempotenz-Keys
- CAPTCHA oder Challenge bei oeffentlichen Flows
- Workflow-Anomalie-Alerts
- Queuing fuer teure asynchrone Jobs
Pruefen Sie Kostenverstaerkungspfade
Moderne APIs leiten oft externe Kosten weiter:
- SMS
- Dokumenten-Rendering
- AI-Inferenz
- Geocoding
- Betrugsermittlung
Wenn eine Route pro Anfrage Geld verbrennen kann, braucht sie strengere Kontrollen als ein normaler Nur-Lese-Endpunkt.
Sie sollten nun wissen, welche Endpunkte staerkere Burst-Kontrollen, Enumerationsschutz und kostenbewusste Quoten benoetigen.
Schritt 5: Sensible Datenexposition pruefen
Dieser Schritt faengt APIs ab, die technisch Auth erfordern, aber trotzdem zu viele Daten an den falschen Aufrufer, die falsche Log-Senke oder den falschen Downstream-Service exponieren.
Pruefen Sie Response-Feld-Exposition
Definieren Sie fuer jede sensible Ressource eine Response-Allowlist nach Rolle oder Zielgruppe.
File: src/serializers/customerSerializer.ts
type Customer = {
id: string;
email: string;
fullName: string;
internalRiskScore: number;
billingAddress: string;
};
export function serializeCustomerForSelf(customer: Customer) {
return {
id: customer.id,
email: customer.email,
fullName: customer.fullName,
billingAddress: customer.billingAddress,
};
}
export function serializeCustomerForSupport(customer: Customer) {
return {
id: customer.id,
email: customer.email,
fullName: customer.fullName,
};
}
Geben Sie nicht direkt volle ORM-Entities zurueck.
Redaktieren Sie Logs
Zugriffsprotokolle und App-Logs lecken oft Token, E-Mails, Kontonummern oder vollstaendige Request-Bodies. Redaktieren Sie vor dem Schreiben.
File: src/logging/redact.ts
export function redact(value: string): string {
return value
.replace(/Bearer\s+[A-Za-z0-9._-]+/g, "Bearer [REDACTED]")
.replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi, "[REDACTED_EMAIL]");
}
Und loggen Sie standardmaessig nie sensible Bodies bei Auth-, Zahlungs- oder AI-Prompt-Routen.
Entfernen oder sichern Sie Debug-Endpunkte
Ueberpruefen Sie alle Routen wie:
/debug/internal/health/details/graphql-playground/swagger/metrics/__admin
Diese werden oft exponiert gelassen, weil sie “fuer Ops” sind, aber Produktionsexposition muss absichtlich und geschuetzt sein.
Pruefen Sie Drittanbieter-Weiterleitung
Wenn Ihre API Prompts, Payloads, Kundendaten oder Identifikatoren an externe SaaS-Anbieter weiterleitet, dokumentieren und validieren Sie diesen Flow explizit.
File: third-party-forwarding-review.yaml
dependency: external-ai-provider
forwarded_fields:
- prompt
- account_tier
- locale
disallowed_fields:
- raw_access_token
- full_payment_card
- national_id
response_validation: required
timeout_seconds: 15
Sie sollten nun wissen, ob Ihre APIs zu viele Daten zurueckgeben, Informationen an Logs lecken, Debug-Oberflaechen exponieren oder mehr Daten als noetig an Drittanbieter weiterleiten.
Schritt 6: Betriebliche Sicherheit pruefen
Gute Code-Level-Kontrollen versagen trotzdem, wenn der API-Rand schlecht konfiguriert ist oder Sie Missbrauch nicht rechtzeitig erkennen koennen.
Pruefen Sie Gateway- und Reverse-Proxy-Kontrollen
Pruefen Sie fuer jeden API-Rand:
- TLS ueberall, wo es sein sollte
- nur erforderliche HTTP-Methoden exponiert
- Body-Size-Limits
- Request-Timeout- und Upstream-Timeout-Policy
- Request-ID-Propagierung
- Schemavalidierung, wo unterstuetzt
- IP-Allowlists fuer Partner- oder Admin-APIs
Pruefen Sie Monitoring und Alerting
Verfolgen Sie mindestens:
- 401- und 403-Spikes
- 429-Spikes
- Routenbasierte Latenz
- Routenbasierte 5xx
- Auth-Fehler nach Endpunkt
- Hochvolumige Objekt-ID-Sweeps
- Traffic zu veralteten Versionen
- Ungewoehnliche Partner-Nutzung
Erstellen Sie eine kleine Metriken-Checkliste:
File: api-monitoring-checklist.md
# API Monitoring Checklist
- 401/403 dashboard per route
- 429 dashboard per route
- Token subject or tenant-based rate anomaly alerts
- Object enumeration detection on high-value routes
- Deprecated version traffic alerts
- Third-party dependency timeout alerts
Pruefen Sie Versionierung und Deprecation
Jede Version sollte haben:
- einen Eigentuemer
- eine Zielgruppe
- ein End-of-Life-Datum
- einen Deprecation-Kommunikationsplan
- eine Traffic-Retirement-Pruefung
Sie koennen auch Deprecation- und Sunset-Header exponieren.
File: src/middleware/deprecation.ts
import { Request, Response, NextFunction } from "express";
export function markDeprecated(res: Response) {
res.setHeader("Deprecation", "true");
res.setHeader("Sunset", "Wed, 30 Sep 2026 23:59:59 GMT");
res.setHeader("Link", '</docs/migrate-v2>; rel="deprecation"');
}
Pruefen Sie auch Partner- und interne APIs
Viele Organisationen machen einen anstaendigen Job bei oeffentlichen APIs und einen schwachen bei “nur internen” APIs. Interne, Partner- und Admin-Routen sollten trotzdem inventarisiert, versioniert, ueberwacht und geprueft werden.
Sie sollten nun wissen, ob der API-Rand gehaertet ist, ob Sie Missbrauch erkennen koennen und ob alte Versionen und versteckte Routen bewusst verwaltet werden.
Schritt 7: Ergebnisse in einen Behebungsplan umwandeln
Ein API-Audit ist nur dann relevant, wenn es zu Aenderungen fuehrt. Die besten Behebungsplaene trennen schnelle Risikoreduktion von Designarbeit, die mehr Zeit braucht.
Erfassen Sie Ergebnisse in einem strukturierten Format
File: api-audit-findings.yaml
findings:
- id: API-001
category: API1-BOLA
service: payments-api
endpoint: GET /v1/accounts/{accountId}
severity: critical
issue: Account lookup does not verify tenant ownership
quick_fix: Add tenant-scoped query and authorization middleware
owner: payments-team
due_in_days: 7
- id: API-002
category: API3-BOPLA
service: partner-orders
endpoint: PATCH /v1/orders/{id}
severity: high
issue: Writable object accepts undocumented internal fields
quick_fix: Add request schema with explicit allowlist
owner: bizops-team
due_in_days: 14
- id: API-003
category: API9-Inventory
service: legacy-beta
endpoint: unknown
severity: high
issue: Public beta host has no owner, no spec, and no retirement plan
quick_fix: Remove public exposure or assign owner immediately
owner: platform-team
due_in_days: 3
Trennen Sie Quick Fixes von architektonischen Fixes
Gute Quick Fixes:
- Eigentumspruefungen hinzufuegen
- fehlende Scope-Pruefungen hinzufuegen
- Response-Felder einschraenken
- Schemavalidierung hinzufuegen
- Routen-Limits senken
- Debug-Endpunkte deaktivieren
- veraltete oeffentliche DNS oder Routing entfernen
Mittelfristige architektonische Fixes:
- Authz in eine zentralisierte Policy-Schicht verschieben
- Admin- und oeffentliche APIs trennen
- Tenant-Isolation neu entwerfen
- automatisierte Inventar-Erkennung erstellen
- Admission- oder Gateway-Policy-Kontrollen hinzufuegen
- Response-Serializer und Schema-Generierung standardisieren
Weisen Sie Eigentuemer und Faelligkeitsdaten zu
Jedes Ergebnis braucht:
- ein verantwortliches Team
- eine Schwere
- einen Behebungsansatz
- ein Zieldatum
- eine Validierungsmethode
Testen Sie den Fix erneut
Ein Fix ist nicht abgeschlossen, bis Sie beweisen koennen, dass der Missbrauchspfad weg ist. Speichern Sie fuer jedes Ergebnis einen positiven und einen negativen Test.
File: tests/account-ownership.http
### Allowed: own tenant account
GET https://api.example.com/v1/accounts/acc_123
Authorization: Bearer {{tenant_a_token}}
### Blocked: another tenant account
GET https://api.example.com/v1/accounts/acc_999
Authorization: Bearer {{tenant_a_token}}
Haeufige Einrichtungsprobleme
Nur oeffentliche APIs auditieren
Teams pruefen oft das oeffentliche Gateway und ignorieren interne, Admin-, Partner-, Beta- und veraltete Oberflaechen. Das laesst einige der riskantesten Routen ausserhalb des Audits.
Annahme, dass Authentifizierung gleich Autorisierung ist
Ein gueltiger Token ist kein Beweis, dass der Aufrufer auf ein bestimmtes Objekt, Feld oder eine Funktion zugreifen sollte. Pruefen Sie Authz separat auf Objekt-, Feld-, Funktions- und Tenant-Ebene.
Schatten-APIs finden, aber nicht entfernen
Inventararbeit reduziert Risiken nur, wenn veraltete oder unbekannte APIs Eigentum, Schutz oder Loeschung erhalten. Eine Tabelle allein schliesst keine Exposition.
OpenAPI-Specs generieren, aber nicht durchsetzen
Eine Spec, die nicht an Validierung, Tests oder Review gebunden ist, kann driften, bis sie zur Dekoration wird. Bevorzugen Sie Schemavalidierung und Contract-Tests gegenueber dokumentationsbasierten Specs.
Einen Endpunkt reparieren statt das Muster
Wenn Sie ein kaputtes Objekt-Level-Autorisierungsproblem finden, suchen Sie nach demselben Zugriffsmuster in der gesamten Codebasis. API-Fehler wiederholen sich oft nach Framework, Serializer oder Repository-Muster.
Zusammenfassung
Ein starkes API-Audit beginnt mit Inventar und endet mit priorisierter Behebung. Der ertragreichste Review-Pfad ist normalerweise: alle API-Oberflaechen verifizieren, Objekt- und Funktionsautorisierung pruefen, Schemas und beschreibbare Properties einschraenken, Missbrauchskontrollen absichern, sensible Datenexposition reduzieren und dann betriebliche Luecken wie versteckte Versionen und schwaches Monitoring bereinigen.
Wiederholen Sie dieses Audit nach einem Zeitplan, nicht nur nach Vorfaellen. Ein praktischer Rhythmus ist vierteljaehrlich fuer risikoreiche APIs, nach groesseren Auth- oder Gateway-Aenderungen und wann immer Sie neue Partner-, SaaS- oder AI-abhaengige Integrationen hinzufuegen. Um das Inventar aktuell zu halten, binden Sie Route-Discovery an Code-Review, Gateway-Konfigurations-Aenderungen und Traffic-Telemetrie, statt sich nur auf Dokumentationsaktualisierungen zu verlassen.
Das Hauptziel ist nicht, “OWASP zu bestehen.” Es ist sicherzustellen, dass Ihre APIs schwer zu enumerieren, schwer zu missbrauchen, schwer zu uebernutzen und einfach zu verstehen und zu entfernen sind, wenn sie nicht mehr existieren sollten.
Verwandte Artikel
AI-Coding-Agent-Pipelines absichern: Sandbox-Konfiguration, Berechtigungsgrenzen und automatisierte Review-Gates
Erfahren Sie, wie Sie AI-Coding-Agent-Pipelines mit Erkennung, Policy-as-Code, Sicherheitsscans, Sandbox-Testausfuehrung, risikogestuften Review-Gates und Audit-Logging absichern.
Eine agentische AI-App absichern: Guardrails, Tool-Berechtigungen und Audit-Logs
Erfahren Sie, wie Sie eine agentische AI-App mit Guardrails, Pro-Tool-Berechtigungen, Benutzer-Genehmigungen und Audit-Logs mit einer praktischen produktionsreifen Basislinie absichern.