Hızlı Özet (TL;DR)
CORS (Cross-Origin Resource Sharing), bir web sitesinin (örn: https://app.maysayazilim.com) farklı bir etki alanındaki (https://api.maysayazilim.com) kaynaklara tarayıcı üzerinden erişmesini denetleyen bir web güvenlik mekanizmasıdır. CORS bir sunucu hatası değil, tarayıcının uyguladığı bir güvenlik kuralıdır (SOP - Same-Origin Policy). Çözüm; sunucu tarafında Access-Control-Allow-Origin başlığıyla istemci alan adını güvenli listeye eklemek ve OPTIONS ön uçuş (Preflight) isteklerine doğru yanıt vermektir.
Same-Origin Policy (Aynı Köken Politikası) Nedir?
Bir isteğin “Aynı Köken” (Same-Origin) sayılması için 3 öğenin tamamen aynı olması gerekir:
- Protokol:
http://vehttps://farklı kökenlerdir. - Domain (Alan Adı):
maysayazilim.comveapi.maysayazilim.comfarklı kökenlerdir. - Port:
localhost:3000velocalhost:8080farklı kökenlerdir.
Herhangi biri farklı olduğunda tarayıcı isteği “Cross-Origin” olarak sınıflandırır.
Preflight (Ön Uçuş) OPTIONS İsteği Nasıl Çalışır?
Eğer istek basit bir GET/POST isteği değilse (özel başlıklar taşıyorsa veya JSON gövdesi içeriyorsa), tarayıcı asıl istekten önce sunucuya bir keşif isteği (Preflight) gönderir:
OPTIONS /api/v1/siparisler HTTP/1.1
Host: api.maysayazilim.com
Origin: https://app.maysayazilim.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type, Authorization
Sunucu bu isteğe şu başlıklarla HTTP 200 veya 204 dönmelidir:
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://app.maysayazilim.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400
CORS Yapılandırmasında Yapılan Tehlikeli Hata: * (Joker Karakter)
En sık yapılan güvenlik hatası; geliştiricilerin hatadan kurtulmak için üretim ortamında Access-Control-Allow-Origin: * yazmasıdır.
- Eğer API kimlik doğrulaması gerektiriyorsa ve çerezler (
credentials: 'include') gönderiliyorsa, joker karakter (*) tarayıcı tarafından zaten engellenir. - Joker karakter açıldığında, internetteki herhangi bir zararlı site kullanıcının tarayıcısını kullanarak şirket API’nize sorgu atabilir.
- Doğru Yaklaşım: Yalnızca şirketinize ait güvenilir alt alan adlarını (Allowlist) dinamik olarak doğrulamaktır.
Güvenli frontend ve backend mimarileriyle tasarlanmış web projeleri için Web Sayfası Tasarım ve Özel Yazılım Geliştirme sayfalarımızı ziyaret edebilirsiniz.