Sicherheitsrichtlinien #
Transport-Sicherheit #
HTTPS verwenden #
Alle Webhook-Kommunikation muss über HTTPS erfolgen. HTTP-Verbindungen sind nicht zulässig.
TLS-Anforderungen #
- Mindestanforderung: TLS 1.2+
- Empfohlen: TLS 1.3 für optimale Sicherheit
Token-Sicherheit #
Replay-Schutz implementieren #
// Beispiel: JTI-basierter Replay-Schutz
const usedTokens = new Set();
function checkReplayProtection(jti) {
if (usedTokens.has(jti)) {
throw new Error('Token bereits verwendet (Replay-Angriff)');
}
usedTokens.add(jti);
}
Token-Ablauf validieren #
function validateTokenTiming(decoded) {
const now = Math.floor(Date.now() / 1000);
if (decoded.exp <= now) {
throw new Error('Token ist abgelaufen');
}
if (decoded.nbf > now) {
throw new Error('Token ist noch nicht gültig');
}
}
JSON Web Signatures (JWS) #
- Pflicht: Alle Tokens müssen signiert sein
- Empfohlene Algorithmen: HS256, RS256, ES256
JSON Web Encryption (JWE) #
- Optional: Für sensible Daten empfohlen
- Algorithmen: A256GCM, A256CBC-HS512
Validierungsanforderungen #
HEAD-Anfragen #
1. JWT-Signatur validieren
2. Token-Ablauf prüfen
3. Issuer verifizieren
4. Replay-Schutz durchführen
POST-Anfragen #
1. JWT-Signatur validieren
2. Token-Ablauf prüfen
3. Payload-Hash verifizieren
4. Content-Length validieren
5. Replay-Schutz durchführen
Best Practices #
Token-Lebensdauer #
- Kurze Gültigkeitsdauer: Maximal 5-15 Minuten
- Angemessene nbf-Zeit: 1-2 Minuten vor aktueller Zeit für Clock-Skew
Replay-Schutz #
- JTI-Tracking: Bereits verwendete Token-IDs speichern
- TTL-basierte Bereinigung: Alte JTIs automatisch entfernen
// Beispiel: TTL-basierte JTI-Bereinigung
class TokenReplayProtection {
constructor() {
this.usedTokens = new Map();
}
addToken(jti, expiration) {
this.usedTokens.set(jti, expiration);
this.cleanupExpiredTokens();
}
cleanupExpiredTokens() {
const now = Date.now() / 1000;
for (const [jti, exp] of this.usedTokens.entries()) {
if (exp < now) {
this.usedTokens.delete(jti);
}
}
}
}
Monitoring und Logging #
- Fehlgeschlagene Validierungen protokollieren
- Verdächtige Aktivitäten überwachen
- Token-Verwendungsstatistiken erfassen
// Beispiel: Sicherheits-Logging
function logSecurityEvent(event, details) {
console.log(JSON.stringify({
timestamp: new Date().toISOString(),
event: event,
details: details,
severity: event.includes('failed') ? 'HIGH' : 'INFO'
}));
}