Tüm rehberler
Yüksek önem derecesiYapılandırma Hataları

CORS yanlış yapılandırması: joker ve yansıtma tuzakları

Cross-Origin Resource Sharing (CORS), hangi diğer web sitelerinin API'nden gelen yanıtları okuyabileceğini kontrol eder. Joker veya yansıtılan origin politikası, herhangi bir sitenin kimlik doğrulamalı istekler yapıp sonuçları okumasına izin verebilir.

Nedir

Tarayıcılar cross-origin okumalarını varsayılan olarak engeller. CORS header'ları bunu seçici olarak gevşetir. Access-Control-Allow-Origin: * yanıtları her web sitesine açar.

Daha ince bir hata origin yansıtmasıdır: sunucu, isteğin taşıdığı Origin'i olduğu gibi allow-origin header'ına geri yansıtır; bu da belirli görünürken fiilen herkese güvenir.

Neden önemli

API'n kullanıcı verisi sunuyor ve kimlik bilgilerine izin veriyorsa, aşırı geniş bir CORS politikası kötü niyetli bir sitenin oturum açmış bir kurbanın verilerini doğrudan API'nden okumasına izin verir.

Yansıtma, Access-Control-Allow-Credentials: true ile birleştiğinde özellikle tehlikelidir — kullanıcı verilerini normalde gizli tutan same-origin korumasını etkisiz kılar.

Nasıl düzeltilir

Belirli origin'leri allowlist'e al

İstek Origin'ini güvenilir alan adlarından oluşan sabit bir listeye göre doğrula ve yalnızca o zaman geri yansıt.

const ALLOWED = new Set(["https://app.yourdomain.com"]);
const origin = req.headers.get("origin") ?? "";
const allow = ALLOWED.has(origin) ? origin : "";
// only set the header when allow is non-empty
Joker'i asla kimlik bilgileriyle birleştirme

Tarayıcılar Access-Control-Allow-Origin: * ile kimlik bilgilerini birlikte yasaklar, bu yüzden uygulamalar bazen origin'i yansıtır — asıl güvenlik açığı budur. Bunun yerine katı bir allowlist kullan.

Varsayılan olarak CORS'suz git

Bir endpoint cross-origin erişime ihtiyaç duymuyorsa, hiç CORS header'ı gönderme. Yalnızca gerçekten gerektiren belirli route'ları aç.

SSS

Access-Control-Allow-Origin: * her zaman kötü müdür?

Gerçekten herkese açık, kimlik bilgisiz kaynaklar için değil (örn. herkese açık bir font ya da açık veri API'si). Bir kullanıcı oturumuna bağlı herhangi bir şey için tehlikelidir.

CORS sunucumu korur mu?

Hayır — CORS sunucu tarafından değil, tarayıcı tarafından uygulanır. Diğer sitelerin JavaScript'inin ne okuyabileceğini yönetir, bir isteğin sana ulaşıp ulaşmayacağını değil.

Uygulaman etkileniyor mu?

AppSafe, bunu ve onlarca başka sorunu tek bir ücretsiz taramada kontrol eder.

Uygulamamı ücretsiz tara