Cross-Origin Resource Sharing (CORS) je bezpečnostní mechanismus, který umožňuje webovým serverům řídit, které zdroje mohou být sdíleny s různými doménami. CORS hlavička je specifická HTTP hlavička, která informuje prohlížeče, zda je povoleno načítání zdrojů z jiné domény než té, ze které pochází stránka.
Jaký je význam CORS hlavičky?
CORS hlavička má zásadní význam při zajišťování bezpečnosti webových aplikací. Pokud aplikace žádá o zdroje z jiné domény, prohlížeč kontroluje, zda server povoluje sdílení těchto zdrojů. CORS chrání uživatele před tzv. „Cross-Site Request Forgery“ (CSRF) útoky a zabezpečuje, že aplikace nebudou načítat škodlivé zdroje.
Základní princip fungování CORS hlavičky
Když klient (např. prohlížeč) odesílá HTTP požadavek na server, který se nachází na jiné doméně, server rozhodne, zda tento požadavek přijme nebo zamítne na základě hodnoty CORS hlavičky. Tento proces zahrnuje:
1. Preflight Request (Předběžný požadavek)
Pokud požadavek používá metody jako PUT
, DELETE
nebo obsahuje specifické hlavičky, prohlížeč nejdříve odešle tzv. předběžný požadavek (OPTIONS request) pro ověření, zda je akce povolena.
2. Odpověď s CORS hlavičkami
Server odpoví hlavičkami, které definují, zda a jaké zdroje jsou povoleny. Klíčové hlavičky CORS odpovědi jsou:
- Access-Control-Allow-Origin – Uvádí doménu (např.
https://example.com
), která může přistupovat k serveru, nebo hodnota *
pro povolení všech domén.
- Access-Control-Allow-Methods – Uvádí metody, které jsou povolené (např.
GET
, POST
, PUT
, DELETE
).
- Access-Control-Allow-Headers – Uvádí specifické hlavičky, které klient může použít v požadavku (např.
Authorization
, Content-Type
).
- Access-Control-Allow-Credentials – Povolení nebo zamítnutí sdílení souborů cookie a dalších ověřovacích údajů mezi doménami.
CORS a bezpečnost webu
Díky CORS hlavičce může server povolit nebo zakázat přístup z různých domén, což zvyšuje bezpečnost. Například pokud webová aplikace využívá API z jiné domény, je důležité povolit přístup pouze důvěryhodným doménám. Nesprávná konfigurace může vést k tomu, že aplikace bude zranitelná vůči útokům, jako jsou XSS (Cross-Site Scripting) nebo CSRF.
Praktické příklady nastavení CORS
Příklad konfigurace CORS na serveru v Node.js pomocí Express.js:
const express = require('express');
const app = express();
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', 'https://example.com'); // Povolit pouze example.com
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
next();
});
app.listen(3000, () => {
console.log('Server běží na portu 3000');
});
V tomto příkladu je povoleno připojení pouze z domény https://example.com
a povolené metody jsou GET
, POST
, PUT
a DELETE
.
Problémy spojené s CORS a jejich řešení
Častým problémem při implementaci CORS je nesprávná konfigurace hlaviček, což vede k blokování požadavků. Řešení může zahrnovat:
- Kontrola správného nastavení hodnoty
Access-Control-Allow-Origin
.
- Ujištění, že server podporuje všechny požadované metody a hlavičky.
- Povolení cookies mezi doménami pomocí
Access-Control-Allow-Credentials: true
a správná správa domén, které mohou k serveru přistupovat.
CORS hlavička hraje zásadní roli v bezpečné komunikaci mezi různými doménami. Správná implementace tohoto mechanismu chrání webové aplikace před potenciálními bezpečnostními hrozbami a umožňuje bezpečné sdílení zdrojů mezi doménami