SSL Sertifikası

CORS ve SSL Yapılandırması

HTTPS'e geçince API çağrıları neden CORS hatası veriyor? Köken değişimi, Nginx başlıkları, preflight ve kimlik bilgili isteklerin tuzakları.

CORS (Cross-Origin Resource Sharing), bir sitenin başka bir kökene ait kaynağa tarayıcıdan erişimini düzenleyen mekanizmadır. SSL ile doğrudan ilgisi yoktur; ancak HTTPS'e geçişte köken değiştiği için CORS hataları sıkça ortaya çıkar.

HTTPS geçişi neden CORS'u etkiler?

Köken; şema, alan adı ve portun birleşimidir. http://ornek.com ile https://ornek.com farklı kökenlerdir. Sitenizi HTTPS'e taşıdıktan sonra API sunucusu yalnızca eski http:// kökenine izin veriyorsa tarayıcı konsolunda şu hatayı görürsünüz:

Access to fetch at 'https://api.ornek.com/veri' from origin 'https://www.ornek.com'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present

Doğru yapılandırma

Nginx üzerinde belirli bir kökene izin vermek için örnek:

location /api/ {
    add_header Access-Control-Allow-Origin "https://www.ornek.com" always;
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;
    add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
    add_header Vary "Origin" always;
    if ($request_method = OPTIONS) { return 204; }
}
  • Çerez veya yetkilendirme başlığı gönderen isteklerde Access-Control-Allow-Credentials: true gerekir ve bu durumda * joker değeri kullanılamaz; kökeni açıkça yazmalısınız.
  • Birden çok kökene izin verecekseniz gelen Origin değerini beyaz listeyle karşılaştırıp yansıtın ve Vary: Origin ekleyin.
  • Preflight (OPTIONS) isteğine 2xx ile yanıt verildiğinden emin olun.

Karma içerik ile karıştırmayın

HTTPS sayfadan http:// API çağrısı yapmak CORS değil, karma içerik engelidir; çözümü API'yi de HTTPS'e almaktır. API alan adının sertifikası geçerli değilse tarayıcı isteği CORS aşamasına gelmeden reddeder ve konsolda genellikle ERR_CERT_* görünür. Sertifikanızı SSL Checker ile doğrulayabilirsiniz.

Güvenlik uyarıları

  • Kimlik bilgili isteklerde Allow-Origin: * kullanmayın; Origin'i kör yansıtmak da aynı riski doğurur.
  • CORS bir sunucu koruması değil, tarayıcı politikasıdır; API yetkilendirmesini yine sunucuda yapın.

Özetle HTTPS geçişinden sonra izinli köken listesini güncelleyin, preflight yanıtlarını doğrulayın ve hem site hem API için geçerli bir SSL sertifikası kullanın.

Bu makale faydalı oldu mu?

Makale Ara

Güvenlik & En İyi Uygulamalar

Yardıma mı İhtiyacınız Var?

Aradığınızı bulamadıysanız destek ekibimiz size yardımcı olabilir.

Destek Talebi Aç