CORS mi CSRF mi? Web Güvenlik Tehditlerinin Farkı ve Korunma
Giriş: Web Güvenliğinde İki Farklı Tehdit
Web güvenliği konusunda karar verirken, CORS (Cross-Origin Resource Sharing) ve CSRF (Cross-Site Request Forgery) arasındaki farkı anlamak kritik önem taşır. Her iki tehdit de internet uygulamalarını hedef alsa da, mekanizmaları, riskleri ve korunma yöntemleri tamamen farklıdır. Bu yazıda, bu iki kavramı yan yana inceleyerek, hangisinin sizin için daha acil bir tehdit oluşturduğunu ve nasıl korunabileceğinizi detaylı bir şekilde analiz edeceğiz.
CORS Nedir? Meşru İhtiyaç mı Güvenlik Riski mi?
CORS, aslında bir güvenlik mekanizmasıdır ve aynı zamanda bir ihtiyaçtır. İnternet tarayıcıları, varsayılan olarak "Same-Origin Policy" (Aynı Köken Politikası) ile çalışır. Bu politika, A sitesinde yüklenen bir JavaScript kodunun B sitesinin verilerine doğrudan erişmesini engeller. Örneğin, Google Maps'ten bir harita iframe'i kullanmak veya bir API'den veri çekmek istediğinizde, CORS kurallarıyla karşılaşırsınız.
CORS'un amacı, bu sınırlamayı kontrollü bir şekilde gevşetmektir. Sunucu, hangi kökenlerden gelen istekleri kabul edeceğini belirleyebilir. Ancak yanlış yapılandırılan CORS başlıkları, kötü amaçlı sitelerin verilerinize erişmesine izin verebilir.
- CORS örneği: example.com'daki bir web uygulaması, api.example.com'dan veri almak istiyor. Tarayıcı, öncesinde bir "preflight" isteği gönderir ve sunucu izin verirse, asıl istek yapılır.
- Risk senaryosu: Eğer sunucu "*" (yıldız) kullanarak tüm kökenlerden gelen istekleri kabul ederse, hassas veriler sızdırılabilir.
CSRF Nedir? Gizli Saldırılar ve Yetki Kötüye Kullanımı
CSRF, CORS'tan tamamen farklı bir saldırı türüdür. Bu saldırıda, siz bir sitede (örneğin bankacılık uygulamasında) oturum açmışken, başka bir sitede kötü amaçlı bir form çalıştırılır. Tarayıcı, otomatik olarak sizin bankacılık sitesine gönderilen isteklere oturumunuzu ekler ve paranız başka bir hesaba aktarılabilir.
CSRF saldırısı nasıl çalışır? Kötü amaçlı bir site açtığınızda, arka planda şöyle bir işlem gerçekleşebilir: "" Bu resmi yüklemesi için yapılan istek, bankanızın sunucusuna, sizin kimliğinizle gönderilir. Banka, bu isteğin nereden geldiğini kontrol etmezse, transfer gerçekleşir.
- CSRF örneği: Sosyal medya uygulamasında oturum açmışken, kötü amaçlı bir site sizin profilinizdeki ayarları değiştirebilir.
- Risk senaryosu: E-ticaret sitesinde oturum açmışken, başka bir sekmede açılan kötü amaçlı link, siparişinizi değiştirebilir.
CORS vs CSRF: Temel Farklar ve Karşılaştırma
| Özellik | CORS | CSRF |
|---|---|---|
| Tehdit Kaynağı | Farklı köken (domain) istekleri | Aynı köken istekleri (oturum açılı) |
| Saldırı Hedefi | Veri okuma | Veri yazma/değiştirme |
| Kullanıcı Etkisi | Pasif (fark edilmesi zor) | Aktif (işlem yapılır) |
| Tarayıcı Davranışı | Preflight isteği gönderir | Otomatik olarak oturumu ekler |
| Korunma Yöntemi | CORS başlıkları yapılandırması | CSRF token'ları |
Korunma Yöntemleri: Adım Adım Strateji
CORS Saldırılarından Korunma
- Açık kökenler tanımlayın: CORS başlığında "*" yerine belirli domainler belirtin. Örneğin: "Access-Control-Allow-Origin: https://trusted-domain.com"
- Gerekli metodları sınırlayın: Sadece GET ve POST gibi gerekli HTTP metodlarına izin verin.
- Kimlik doğrulama ile başlıkları kontrol edin: "Access-Control-Allow-Credentials: true" kullanırken dikkatli olun.
- Preflight isteklerini doğrulayın: OPTIONS isteklerine sunucu tarafında kontrol mekanizması ekleyin.
CSRF Saldırılarından Korunma
- CSRF token kullanın: Her form gönderiminde, sunucunun verdiği benzersiz bir token isteyebilirsiniz. Saldırgan bu token'ı bilemeyeceğinden, saldırı başarısız olur.
- SameSite cookie özelliğini etkinleştirin: Çerezlerin sadece aynı siteden gelen isteklerde gönderilmesini sağlar.
- HTTP Referer başlığını doğrulayın: İsteğin hangi sayfadan geldiğini kontrol edin (yedek yöntem).
- POST isteklerini zorunlu kılın: Durum değiştiren işlemler (para transfer, ayar değişiklikleri) için sadece POST kullanın.
Hangisine Öncelik Vermeliyiz?
Web uygulaması geliştirirken veya güvenlik kararları alırken, her iki tehdide de eşit önem vermek gerekir, ancak risk analizi sizin spesifik durumunuza göre değişir. Eğer uygulamanız kullanıcı verileri yazıyorsa (banka transferleri, profil güncellemeleri), CSRF tehdidi daha kritiktir. Eğer harici API'lerden veri çekiyorsanız, CSRF'ye ek olarak CSRF token'ları mutlaka kullanmalısınız.
Karar verme sürecinde, kurumsal veya kişisel projeleriniz için güvenlik standardları belirlerken, sadece CORS veya sadece CSRF koruması yeterli değildir. İki mekanizmayı da anlamak ve uygulamak, modern web uygulamalarının temel bileşenleridir. Her yazılım geliştirme ekibi, bu iki tehdidi ayırt etmeli ve karşılık gelen çözümleri layerli bir şekilde uygulamalıdır.