Datenexposition in APIs: Prävention und Erkennung
Die unzulässige Exposition von Daten über APIs stellt eine der größten Schwachstellen in modernen Systemen dar. Falsch konfigurierte oder unzureichend geschützte APIs können vertrauliche Informationen preisgeben, Benutzerdaten gefährden und Datenschutzbestimmungen wie LGPD und DSGVO verletzen.
Arten der Datenexposition in APIs
1. Übermäßige Datenexposition (API3:2023 - OWASP)
APIs, die mehr Informationen zurückgeben als notwendig:
- Der Endpoint gibt das vollständige Objekt zurück, obwohl nur einige Felder benötigt werden
- Einbindung sensibler Felder in Antworten (Passwort-Hashes, interne Tokens)
- Systemmetadaten, die in Fehlern offengelegt werden
// [ERRO] Exemplo RUIM - Expondo dados demais
GET /api/users/123
{
"id": 123,
"name": "João Silva",
"email": "[email protected]",
"password_hash": "$2b$10$...", // [AVISO] Nunca expor
"ssn": "123-45-6789", // [AVISO] Dado sensível
"internal_role_id": 42, // [AVISO] Dado interno
"created_at": "2025-01-01",
"last_login_ip": "192.168.1.1" // [AVISO] Informação sensível
}
// [OK] Exemplo BOM - Apenas dados necessários
GET /api/users/123/profile
{
"id": 123,
"name": "João Silva",
"avatar_url": "https://..."
}
2. Fehlende Ressourcenfilterung (Broken Object Level Authorization)
Benutzer können durch Ändern von IDs auf Daten anderer Benutzer zugreifen:
// [ERRO] Vulnerável a IDOR (Insecure Direct Object Reference)
GET /api/orders/456 // Usuário A pode ver pedidos do Usuário B
// [OK] Protegido - Validar autorização
app.get('/api/orders/:id', async (req, res) => {
const order = await Order.findById(req.params.id);
// Verificar se o pedido pertence ao usuário autenticado
if (order.userId !== req.user.id) {
return res.status(403).json({ error: 'Acesso negado' });
}
res.json(order);
});
3. Exposition sensibler Informationen in URLs
- Authentifizierungs-Tokens in Query-Strings
- Persönliche Daten in Pfaden
- Vertrauliche Informationen in Server-Logs
Präventionsstrategien
Data Transfer Objects (DTOs) implementieren
// TypeScript - Definir claramente o que expor
interface UserPublicDTO {
id: number;
name: string;
avatar_url: string;
}
class UserService {
async getPublicProfile(userId: number): Promise<UserPublicDTO> {
const user = await db.users.findUnique({ where: { id: userId } });
// Retornar apenas campos permitidos
return {
id: user.id,
name: user.name,
avatar_url: user.avatar_url
};
}
}
Serialisierungsfilter anwenden
- Bibliotheken wie class-transformer (TypeScript) verwenden
- Decorators zum Markieren sensibler Felder (@Exclude)
- Serialisierungsgruppen für unterschiedliche Kontexte (öffentlich vs. admin)
Autorisierungsvalidierung
// Middleware de autorização
const checkResourceOwnership = (resourceType) => {
return async (req, res, next) => {
const resource = await db[resourceType].findById(req.params.id);
if (!resource) {
return res.status(404).json({ error: 'Recurso não encontrado' });
}
if (resource.ownerId !== req.user.id && !req.user.isAdmin) {
return res.status(403).json({ error: 'Acesso não autorizado' });
}
req.resource = resource;
next();
};
};
// Uso
app.get('/api/documents/:id',
authenticate,
checkResourceOwnership('documents'),
(req, res) => {
res.json(req.resource);
}
);
Erkennungstechniken
Payload-Analyse
- Antworten kritischer Endpoints manuell überprüfen
- Tools wie Burp Suite, OWASP ZAP verwenden
- Automatisierte Tests zur Überprüfung exponierter Felder
Überwachung und Benachrichtigungen
- Abnormale Zugriffsmuster erkennen (enumeration)
- Bei übermäßig verweigerten Zugriffen warnen
- Das pro Benutzer übertragene Datenvolumen überwachen
Code Review und statische Analyse
- DTOs und Serialisierungsmodelle überprüfen
- Implementierung der Autorisierungen verifizieren
- SAST-Tools zur Identifizierung von Expositionen verwenden
Best Practices
- Das Prinzip der geringsten Rechte für exponierte Daten anwenden
- Rate Limiting implementieren, um Scraping zu verhindern
- UUIDs anstelle sequentieller IDs verwenden
- Sensible Daten bei der Übertragung und im Ruhezustand verschlüsseln
- API-Versionierung für sichere Änderungen implementieren
- Regelmäßig Sicherheitstests durchführen
- Klar dokumentieren, welche Daten jeder Endpoint preisgibt
- GraphQL mit Vorsicht verwenden (kann Over-Fetching begünstigen)
Compliance und Regulierung
- LGPD/DSGVO: Datenminimierung, Rechtsgrundlage für die Verarbeitung
- PCI-DSS: Schutz von Kreditkartendaten
- HIPAA: Schutz von Gesundheitsinformationen (USA)
- SOC 2: Zugriffskontrollen und Überwachung
