CORS (Cross-Origin Resource Sharing)

Cross-Origin Resource Sharing (CORS) ist ein Sicherheitsmechanismus,
der es Webbrowsern ermöglicht, kontrolliert auf Ressourcen von
anderen Domains als der eigenen zuzugreifen. Es ist ein Kompromiss
zwischen Flexibilität und Sicherheit im modernen Web.
Was ist CORS?
Stellen Sie sich CORS wie einen Türsteher vor, der kontrolliert, welche Webseiten auf Ressourcen (wie Daten oder Bilder) von anderen Webseiten zugreifen dürfen. Ohne diese Kontrolle könnten böswillige Websites einfach Daten von anderen Seiten abgreifen. CORS erweitert die Same-Origin-Policy des Browsers, um sichere domainübergreifende Zugriffe zu ermöglichen.
Wie funktioniert CORS?
- Der Browser sendet bei Anfragen an andere Domains spezielle CORS-Header
- Der Server antwortet mit Erlaubnis oder Ablehnung durch entsprechende Header
- Bei komplexen Anfragen erfolgt zuerst eine "Preflight"-Anfrage
- Der Browser setzt die Regeln automatisch durch
Wichtige CORS-Header
- Access-Control-Allow-Origin: Legt fest, welche Domains zugreifen dürfen
- Access-Control-Allow-Methods: Erlaubte HTTP-Methoden
- Access-Control-Allow-Headers: Zugelassene HTTP-Header
- Access-Control-Allow-Credentials: Erlaubt Authentifizierungsdaten
Code-Beispiele
Server-seitige CORS-Konfiguration
// Express.js Beispiel
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "https://example.com");
res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
res.header("Access-Control-Allow-Headers", "Content-Type");
next();
});
Client-seitige CORS-Anfrage
// Fetch API mit CORS
fetch("https://api.example.com/data", {
method: "POST",
credentials: "include",
headers: {
"Content-Type": "application/json"
}
});
Sicherheitsaspekte
- Genaue Kontrolle über erlaubte Domains
- Schutz vor Cross-Site Request Forgery (CSRF)
- Sichere Handhabung von Authentifizierungsdaten
- Einschränkung erlaubter HTTP-Methoden
- Kontrolle über exponierte Header
Häufige Anwendungsfälle
- API-Zugriffe von verschiedenen Domains
- Single-Page Applications (SPAs)
- Microservices-Kommunikation
- Ressourcen-Sharing zwischen Subdomains
- Integration von Drittanbieter-Diensten