Giriş
Günümüz web uygulamalarının karmaşıklığı arttıkça, güvenlik tehditleri de çeşitlenmekte ve daha sofistike hale gelmektedir. Bu tehditler arasında özellikle CORS (Cross-Origin Resource Sharing) ve CSRF (Cross-Site Request Forgery), geliştiricilerin dikkat etmesi gereken önemli iki konudur. CORS, farklı kaynaklardan (domain, protokol veya port) gelen istekleri yöneterek, web sitelerinin güvenli bir şekilde veri alışverişi yapmasını sağlayan bir mekanizmadır. Yanlış yapılandırılmış bir CORS politikası, yetkisiz kaynaklardan gelen isteklere izin vererek güvenlik açıklarına yol açabilir. CSRF ise, oturum açmış bir kullanıcının bilgisi dışında, kötü niyetli bir web sitesi tarafından istek göndermesini sağlayan bir saldırı türüdür. Bu saldırılar, kullanıcının hesabında istenmeyen işlemler yapılmasına, veri sızdırılmasına veya itibar kaybına neden olabilir. Bu makalede, CORS ve CSRF tehditlerini detaylı bir şekilde inceleyecek ve bu tehditlere karşı alınabilecek etkili güvenlik önlemlerini örneklerle açıklayacağız.
CORS (Cross-Origin Resource Sharing) Nedir ve Neden Önemlidir?
CORS, tarayıcıların aynı köken politikası (Same-Origin Policy – SOP) kısıtlamalarını aşarak, farklı kaynaklardan gelen isteklere izin vermesini sağlayan bir mekanizmadır. SOP, bir web sayfasının yalnızca kendi kaynağından (aynı domain, protokol ve port) gelen isteklere erişmesine izin verir. Bu, güvenlik açısından önemlidir, çünkü kötü niyetli bir web sitesinin, kullanıcının tarayıcısını kullanarak başka bir web sitesine (örneğin, bankacılık uygulaması) yetkisiz istekler göndermesini engeller. Ancak, modern web uygulamaları sıklıkla farklı kaynaklardan veri alışverişi yapmak zorunda kalır (örneğin, bir API’den veri çekmek). İşte bu noktada CORS devreye girer.
CORS, sunucu tarafında belirli HTTP başlıkları (örneğin, Access-Control-Allow-Origin) kullanılarak yapılandırılır. Bu başlıklar, tarayıcıya hangi kaynaklardan gelen isteklere izin verildiğini bildirir. Eğer sunucu, isteği gönderen kaynağa izin veriyorsa, tarayıcı isteği gerçekleştirir. Aksi takdirde, tarayıcı isteği engeller ve bir hata döndürür. Yanlış yapılandırılmış bir CORS politikası (örneğin, Access-Control-Allow-Origin: * kullanmak), herhangi bir kaynaktan gelen isteklere izin vereceği için güvenlik açısından risklidir.
CSRF (Cross-Site Request Forgery) Nedir ve Nasıl Çalışır?
CSRF, oturum açmış bir kullanıcının tarayıcısını kullanarak, kullanıcının bilgisi dışında, hedef web sitesine istek göndermeyi amaçlayan bir saldırı türüdür. Saldırgan, genellikle sosyal mühendislik veya kötü amaçlı bir bağlantı aracılığıyla kullanıcıyı kandırarak, kendi hazırladığı bir web sayfasını ziyaret etmesini sağlar. Bu sayfa, hedef web sitesine (örneğin, kullanıcının bankacılık uygulamasına) gizli bir istek gönderir. Eğer kullanıcı o sırada hedef web sitesinde oturum açmışsa, tarayıcı isteği otomatik olarak kullanıcının oturum bilgileriyle (çerezler vb.) birlikte gönderir. Bu sayede, saldırgan, kullanıcının hesabında yetkisiz işlemler gerçekleştirebilir (para transferi, şifre değiştirme, vb.).
CORS ve CSRF’ye Karşı Güvenlik Önlemleri
CORS ve CSRF saldırılarına karşı alınabilecek çeşitli güvenlik önlemleri bulunmaktadır. Bu önlemler, hem sunucu hem de istemci tarafında uygulanabilir:
- CORS için:
- Access-Control-Allow-Origin başlığını doğru yapılandırın. Mümkün olduğunca spesifik kaynaklara izin verin (örneğin, Access-Control-Allow-Origin: https://www.example.com). “*” kullanmaktan kaçının.
- Access-Control-Allow-Methods başlığı ile izin verilen HTTP metotlarını (GET, POST, PUT, DELETE vb.) sınırlayın.
- Access-Control-Allow-Headers başlığı ile izin verilen HTTP başlıklarını belirtin.
- Preflight isteklerini (OPTIONS) doğru şekilde işleyin.
- CSRF için:
- CSRF Token Kullanımı: Sunucu, her form veya istek için benzersiz, rastgele ve tahmin edilemeyen bir token oluşturur. Bu token, istemciye gönderilir ve istemci, her istekte bu tokeni sunucuya geri göndermek zorundadır. Sunucu, gelen tokenin geçerli olup olmadığını kontrol ederek isteği kabul eder veya reddeder.
- Double Submit Cookie: Sunucu, hem bir çerezde hem de istek parametresinde (örneğin, gizli bir form alanında) aynı rastgele değeri saklar. İstemci, isteği gönderirken bu değeri hem çerezde hem de parametrede sunucuya geri gönderir. Sunucu, iki değerin eşleşip eşleşmediğini kontrol eder.
- HTTP Başlıklarını Kontrol Etme: Origin ve Referer başlıkları, isteğin hangi kaynaktan geldiğini gösterir. Sunucu, bu başlıkları kontrol ederek, isteğin beklenen kaynaktan gelip gelmediğini doğrulayabilir. Ancak, bu başlıklar her zaman güvenilir olmayabilir.
- Kullanıcı oturumlarını kısa tutun ve otomatik oturum kapatma mekanizmaları kullanın.
- Kullanıcıları CSRF saldırıları hakkında bilgilendirin ve şüpheli bağlantılara tıklamamaları konusunda uyarın.
Örnek: CORS ile API’lerde Güvenli İstek Yönetimi
Bir API geliştiriyorsunuz ve bu API’ye farklı bir domaindeki bir web uygulamasından erişilmesini istiyorsunuz. Bu durumda, CORS’u doğru bir şekilde yapılandırmanız gerekir. API’nizin sunucu tarafında, aşağıdaki HTTP başlıklarını kullanarak CORS’u yapılandırabilirsiniz:
Access-Control-Allow-Origin: https://www.example.com (Bu, yalnızca example.com’dan gelen isteklere izin verir)
Access-Control-Allow-Methods: GET, POST, OPTIONS (Bu, yalnızca GET, POST ve OPTIONS metotlarına izin verir)
Access-Control-Allow-Headers: Content-Type, Authorization (Bu, yalnızca Content-Type ve Authorization başlıklarına izin verir)
Bu yapılandırma, yalnızca https://www.example.com adresinden gelen GET, POST ve OPTIONS isteklerine, Content-Type ve Authorization başlıklarıyla birlikte izin verir. Diğer kaynaklardan gelen istekler tarayıcı tarafından engellenir.
Sonuç
CORS ve CSRF, web uygulamaları için ciddi güvenlik tehditleri oluşturur. CORS, farklı kaynaklardan gelen istekleri yönetirken, yanlış yapılandırma yetkisiz erişime yol açabilir. CSRF ise, oturum açmış bir kullanıcının bilgisi dışında işlem yapılmasını sağlayarak, veri ihlallerine ve itibar kaybına neden olabilir. Bu makalede, CORS ve CSRF’nin ne olduğunu, nasıl çalıştıklarını ve bu tehditlere karşı alınabilecek etkili güvenlik önlemlerini detaylı bir şekilde inceledik. CORS için, Access-Control-Allow-Origin başlığının doğru yapılandırılması, izin verilen metotların ve başlıkların sınırlandırılması ve preflight isteklerinin doğru işlenmesi önemlidir. CSRF için ise, CSRF token kullanımı, double submit cookie tekniği, HTTP başlıklarının kontrolü, oturum yönetimi ve kullanıcıların bilgilendirilmesi gibi önlemler alınabilir. Bu güvenlik önlemlerini uygulayarak, web uygulamalarınızı CORS ve CSRF saldırılarına karşı daha güvenli hale getirebilir ve kullanıcılarınızın verilerini koruyabilirsiniz. Unutmayın, güvenlik sürekli bir süreçtir ve güncel tehditlere karşı önlemlerinizi düzenli olarak gözden geçirmeniz önemlidir.