Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çö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 denetimi, bir API’nin hangi web origin’lerine yanıt okuma izni verdiğini ve bu politikanın olumlu ve olumsuz durumlarda tutarlı çalıştığını sınamaktır. Yalnız başarılı bir istek görmek yeterli değildir: izin verilmeyen bir origin’in yanıtı okuyamadığını, preflight gerektiren yöntem ve başlıkların doğru değerlendirildiğini de kontrol etmelisiniz. Bu rehber bir hata mesajını gidermekten çok, yapılandırılmış politikanın testine odaklanır.

Önce beklenen politikayı yazın​


Denetimi kendi API’nizde veya yetkili test ortamında, veri değiştirmeyen bir uç noktayla yapın. Örnekte https://api.example.com/data adresinin GET yanıtını yalnız https://app.example.com okuyabilsin. https://deny.example.net ise izinli olmasın. Gerçek uygulamada endpoint, origin ve kullanılacak başlık listesini kendi sözleşmenize göre değiştirin.

Origin karşılaştırmasında şema, ana makine ve port birlikte önemlidir. API adresi ile izin verilen arayüz adresi farklı kavramlardır; izin listesine API’nin kendi adresini yazmak arayüze otomatik izin vermez.

Olumlu ve olumsuz origin testi​


cURL kurulu bir kabukta şu iki isteğin yanıt başlıklarını karşılaştırın:

Bash:
curl --include "https://api.example.com/data" -H "Origin: https://app.example.com"
curl --include "https://api.example.com/data" -H "Origin: https://deny.example.net"

İlk yanıtta beklenen izin, Access-Control-Allow-Origin: https://app.example.com değeridir. İkinci yanıtta reddedilen origin’i izinli gösteren bir başlık bulunmamalıdır. Sunucu yine 200 ve veri döndürebilir; CORS denetiminin ölçtüğü şey tarayıcıdaki JavaScript’in bu yanıtı okuyabilmesidir.

cURL, tarayıcının CORS engelini uygulamaz. Bu nedenle komutun veri göstermesini “olumsuz test başarısız” şeklinde yorumlamayın. Sonucu, izin başlıklarını ve daha sonra gerçek tarayıcı davranışını birlikte değerlendirerek kaydedin.

Preflight denetimi​


Uygulama Authorization gibi bir başlık kullanıyorsa tarayıcı ön kontrol isteği yapar. Temsili bir kontrol:

Bash:
curl --include -X OPTIONS "https://api.example.com/data" -H "Origin: https://app.example.com" -H "Access-Control-Request-Method: GET" -H "Access-Control-Request-Headers: Authorization"

Bu komut asıl GET işlemini yapmaz; sunucuya hangi yöntemin ve başlığın kullanılacağını bildirir. Beklenen sonuç başarılı bir HTTP durumu, doğru origin ve Authorization başlığına uygun izindir. Authorization iznini genel bir yıldızın kapsadığını varsaymayın; bu başlığın açıkça listelenmesi gerekir. Sadece OPTIONS yanıtının doğru olması da yetmez; gerçek GET yanıtını ayrıca inceleyin.

TestBeklenen sonuçKaydedilecek kanıt
İzinli originYanıt tarayıcı koduna açılırGerçek istek origin’i ve Allow-Origin
İzinsiz originYanıt tarayıcı koduna açılmazİzin veren başlığın bulunmaması veya eşleşmemesi
İzinli preflightYöntem/başlık kontrolü geçerOPTIONS durumu ve izin başlıkları
İzinsiz yöntem veya başlıkÖn kontrol tarayıcıda reddedilirİstenen değer ile yanıt farkı

Olumsuz preflight testini, uygulamanın desteklemediği bir yöntem veya başlık adıyla yalnız OPTIONS isteğinde yapın. Asıl veri değiştiren isteği göndererek test etmeyin.

Tarayıcı ve önbellek kontrolü​


  1. Gerçek arayüzün test sayfasından API’ye istek yapın; Network’te gönderilen Origin ile izin başlığını karşılaştırın.
  2. İzinsiz bir test origin’inden aynı isteği sınayın. JavaScript’in yanıtı okuyamadığını doğrulayın.
  3. Çerezli kullanımda istemcinin credentials modu ile belirli Allow-Origin ve Access-Control-Allow-Credentials: true değerini birlikte kontrol edin; yıldız origin bu modla uyumlu değildir.
  4. Yanıtın Allow-Origin değeri istek origin’ine göre değişiyorsa HTTP önbelleğinde Vary: Origin kullanımını inceleyin.
  5. Sonucu endpoint, yöntem, origin, istenen başlıklar ve kimlik bilgisi modu ile kaydedin; parolayı veya gerçek erişim belirtecini rapora eklemeyin.

Sık sorulan sorular​


CORS denetimi API’nin yetkilendirmesini de kanıtlar mı?​


Hayır. CORS tarayıcıdaki yanıt erişimini düzenler; kullanıcının kaynağı okumaya veya değiştirmeye yetkili olup olmadığı sunucuda ayrıca denetlenmelidir. CORS sonucu, genel erişim kontrolü testi yerine kullanılamaz.

Başlıklar düzeldi ama tarayıcı eski preflight sonucunu kullanıyorsa?​


Preflight yanıtları ayrı bir önbellekte tutulabilir. Testi yorumlarken Access-Control-Max-Age değerini ve tarayıcının mevcut ön kontrol kaydını dikkate alın; yalnız normal sayfa önbelleğini yenilemenin tüm ön kontrol sonuçlarını kaldırdığını varsaymayın.
 

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.