Mehmet

WFN Üye
Konular
1,204
Mesajlar
1,205
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
CORS proxy, tarayıcı ile hedef API arasına giren sunucu tarafı ara katmandır. Ön yüzdeki JavaScript, farklı origin’deki API yanıtını CORS nedeniyle okuyamıyorsa isteği kendi sunucunuzdaki bir uç noktaya gönderir; sunucunuz hedef API’ye bağlanır ve sonucu tarayıcıya döndürür. Üretimde güvenli yaklaşım, herkese açık “her URL’yi getir” servisi kullanmak değil; hedefleri, metotları, başlıkları ve kaynakları sınırlandırılmış bir proxy kurmaktır.

CORS neden ortaya çıkar?​


Bir web sayfasının origin’i şema, ana makine ve porttan oluşur. Örneğin https://app.example.com ile https://api.example.com ana makine bakımından farklı olduğu için farklı origin kabul edilir. Tarayıcı, başka bir origin’e yapılan isteğin yanıtını JavaScript koduna vermeden önce hedef sunucunun CORS izinlerini kontrol eder.

Hedef API uygun Access-Control-Allow-Origin başlığını göndermiyorsa, sunucu isteği almış olsa bile tarayıcı yanıtı uygulamaya açmayabilir. API size aitse ilk tercih CORS proxy değil, API üzerinde yalnızca ihtiyaç duyulan origin’lere izin veren doğrudan CORS yapılandırmasıdır. Hedef üçüncü tarafa aitse veya API anahtarının tarayıcıya gönderilmemesi gerekiyorsa sunucu tarafı proxy anlamlı hale gelir.

CORS proxy akışı​


Örneğin ön yüzünüz https://app.example.com, hedef servisiniz de https://api.example.com olsun. Ön yüz, hedef alan adına doğrudan gitmek yerine kendi alan adındaki /api/data uç noktasını çağırır.

  1. Tarayıcı /api/data adresine istek gönderir. Bu uç nokta ön yüzle aynı origin’deyse bu adımda cross-origin CORS izni gerekmez.
  2. Proxy, sunucu tarafında sabit olarak tanımlanmış hedef API’ye bağlanır.
  3. Proxy hedef yanıtın durum kodunu ve içeriğini kontrol eder; gereksiz başlıkları ve hassas verileri istemciye aktarmaz.
  4. Yanıtı ön yüze döndürür. Ön yüz farklı bir origin’de barınıyorsa proxy, yalnızca izin verilen origin için uygun CORS başlıklarını ekler.

Basit bir istemci çağrısı şöyle olabilir:

Kod:
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('HTTP ' + response.status);
    }
    return response.json();
  })
  .then(data => console.log(data))
  .catch(error => console.error('Veri alınamadı:', error.message));

Bu örnek, uç noktanın JSON döndürdüğünü varsayar; ağ ve JSON ayrıştırma hataları da son hata işleyicisine gider.

response.ok kontrolü önemlidir; yalnızca fetch() çağrısının hata fırlatmaması, HTTP yanıtının başarılı olduğu anlamına gelmez.

Hangi durumda proxy kullanılmalı?​


Kararı aşağıdaki gibi verebilirsiniz. Güvenli proxy tasarımı yalnızca CORS başlığı eklemekle bitmez; hedef doğrulaması ve gerekiyorsa kimlik/yetki kontrolleri de gerekir.

DurumTercihNeden
API size aitDoğrudan CORSEk sunucu ve ağ adımı gerekmez
Üçüncü taraf API sunucudan kullanıma izin veriyorKısıtlı proxy değerlendirilebilirYetkilendirme, kullanım şartları ve kota ayrıca korunur
API anahtarı gizli kalmalıSunucu proxy’siAnahtar tarayıcı koduna gönderilmez
Kullanıcı rastgele URL verecekProxy’den kaçının veya güçlü allowlist kullanınSSRF ve kötüye kullanım riski yükselir

Güvenli kurulum adımları​


  1. Hedefleri tam URL olarak kullanıcıdan almak yerine weather veya catalog gibi kaynak adlarını sabit hedeflerle eşleyin.
  2. Proxy’nin yalnızca https kullanmasına ve gerekli HTTP metotlarına izin verin. Gereksiz istek başlıklarını ve istemcinin gönderdiği kimlik bilgilerini hedefe otomatik aktarmayın.
  3. API anahtarlarını yalnızca sunucu ortamında veya güvenli gizli bilgi yönetiminde tutun; hata mesajlarına, günlük kayıtlarına ve istemci yanıtlarına yazmayın.
  4. İstek ve yanıt boyutunu, toplam zaman aşımını ve istek hızını sınırlayın. Yönlendirmeleri varsayılan olarak kapatın; zorunluysa her yeni hedefte aynı izin ve IP kontrollerini yeniden uygulayın.
  5. Hedef ana makineyi allowlist ile doğrulayın. Çözümlenen tüm IPv4/IPv6 adreslerinde localhost, özel ağ ve bulut metadata hedeflerini engelleyin; bağlantının doğrulanan adrese kurulduğundan emin olun. Kontrolden sonra yeniden denetlenmeyen DNS çözümlemesi, DNS rebinding açığı bırakabilir. Ağ çıkışını da yalnızca gerekli hedeflere sınırlandırın.
  6. Özel veriye erişen proxy uç noktasında kullanıcı kimliğini ve her kaynağa erişim yetkisini doğrulayın. CORS bir kimlik doğrulama yöntemi değildir; tarayıcı dışındaki istemcilerin isteğini engellemez.
  7. Ön yüze izin verilecek origin’leri açıkça tanımlayın. Kimlik bilgili isteklerde Access-Control-Allow-Origin: * kullanmayın; belirli origin ve gerektiğinde Access-Control-Allow-Credentials: true yapılandırması gerekir.
  8. Geliştirici araçlarında önce varsa OPTIONS ön isteğini, sonra gerçek isteğin HTTP durum kodunu ve yanıt başlıklarını kontrol edin.

Sık yapılan hatalar​


mode: 'no-cors' CORS’u okunabilir bir yanıtla çözmez; cross-origin yanıtı opak hale getirir ve JavaScript’in içeriği okumasını engeller. API size aitken proxy eklemek de gereksiz gecikme ve yeni bir saldırı yüzeyi oluşturabilir.

Gelen Origin değerini doğrulamadan doğrudan Access-Control-Allow-Origin olarak geri yansıtmak güvenli değildir. Özellikle çerez veya başka kimlik bilgileri kullanılıyorsa yalnızca önceden tanımlanmış origin’ler kabul edilmelidir. Ayrıca hedef URL’yi tamamen kullanıcıya bırakmak, proxy’yi SSRF aracına dönüştürebilir. Yalnızca IP adresinin veya alan adının biçimsel olarak geçerli olması yeterli değildir; hedefin izin verilen kaynaklardan biri olduğu da doğrulanmalıdır.

Sık sorulan sorular​


Proxy kurmadan CORS hatasını tarayıcı eklentisiyle çözebilir miyim?​


Geliştirme sırasında yerel test için geçici olarak yardımcı olabilir; fakat gerçek kullanıcıların tarayıcılarını değiştiremez. Üretim çözümü API’nin CORS yapılandırması veya kontrolünüzdeki sunucu tarafı geçittir.

Proxy hedef API’nin kota sınırlarını ortadan kaldırır mı?​


Hayır. İstekler yine hedef API’ye ulaşır. Proxy yalnızca erişim katmanını değiştirir; kota, kullanım şartları ve yetkilendirme kuralları hedef servis tarafından uygulanmaya devam eder.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic