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
İ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-emptyTarayı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.
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İlgili rehberler
Secure, HttpOnly ve SameSite cookie flag'leri
Oturum cookie'lerinin çalınmasını önleyen üç flag.
Content-Security-Policy (CSP): nedir ve nasıl eklenir
Enjekte edilen script'lerin çalışmasını durduran header.
İstemci tarafı JavaScript'te açığa çıkan API key'leri
Bundle'ındaki her şey herkese açıktır. Öyle davran.