Web Güvenliği Temelleri: SSRF, CSRF ve CORS Açıklaması
Modern web dünyasında güvenlik sadece bir özellik değil, bir temeldir. Uygulamalar birbirine daha fazla bağlandıkça, farklı kökenler ve sunucular arasında isteklerin nasıl yönetildiğinin ayrıntılarını anlamak her geliştirici için kritik öneme sahiptir.
Bugün, her web geliştiricisinin ustalaşması gereken üç kritik kavramı derinlemesine inceleyeceğiz: SSRF, CSRF ve CORS. Bunlar karmaşık kısaltmalar gibi görünse de web uygulaması güvenliğinin ön saflarını temsil ederler.
1. SSRF (Sunucu Tarafı İstek Sahteciliği)
SSRF, bir saldırganın sunucu tarafındaki bir uygulamayı, saldırganın seçtiği rastgele bir alan adına HTTP istekleri yapmaya zorlayabildiği bir güvenlik açığıdır.
Nasıl Çalışır?
Girdi olarak bir URL alan (örneğin bir profil resmini çekmek veya bir bağlantıyı önizlemek için) ve ardından sunucudan bu URL’ye istek yapan bir web uygulaması hayal edin. Uygulama bu URL’yi düzgün bir şekilde doğrulamazsa, bir saldırgan dahili bir IP adresi veya bir geri döngü adresi (127.0.0.1) sağlayabilir.
Proxy görevi gören sunucu, daha sonra halka açık internete kapalı olan dahili servislerden hassas veriler çekebilir:
- Bulut Meta Verileri: IAM kimlik bilgilerini almak için AWS/GCP üzerinde
169.254.169.254adresine erişmek. - Dahili Yönetici Panelleri: Jenkins veya Kubernetes panoları gibi dahili araçlara erişim.
- Port Tarama: Dahili ağda çalışan diğer servisleri keşfetmek.
Önleme
- İzin Listesi (Allowlisting): Sadece önceden tanımlanmış güvenilir alan adlarına yapılan isteklere izin verin.
- Girdi Doğrulama: URL’nin izin verilen protokolleri (örneğin sadece
https://) kullandığından ve dahili IP aralıklarını göstermediğinden emin olun. - Ağ Ayrıştırma: Web sunucusunun dahili kaynaklara sınırlı erişimi olduğundan emin olun.
2. CSRF (Siteler Arası İstek Sahteciliği)
CSRF, bir kurbanın tarayıcısını, kurbanın halihazırda oturum açmış olduğu başka bir web sitesinde istenmeyen bir işlem yapması için kandıran bir saldırıdır.
Nasıl Çalışır?
Bu saldırı, tarayıcıların bir alan adına yapılan her isteğe oturum çerezleri gibi ortam kimlik bilgilerini otomatik olarak dahil etmesi gerçeğinden yararlanır.
- Kullanıcı
bank.comadresinde oturum açar. - Kullanıcı başka bir sekmede kötü amaçlı bir site olan
evil.com‘u ziyaret eder. evil.com,bank.com/transfer?amount=1000&to=attackeradresine birPOSTisteği gönderen gizli bir form içerir.- Tarayıcı, isteği kullanıcının
bank.comoturum çereziyle birlikte gönderir. bank.comgeçerli bir oturum görür ve transferi gerçekleştirir.
Önleme
- Anti-CSRF Belirteçleri: Durumu değiştiren her isteğe benzersiz, gizli ve tahmin edilemez bir belirteç ekleyin. Sunucu işlemden önce bu belirteci doğrular.
- SameSite Çerezleri: Çerezlerin siteler arası isteklerde gönderilmesini önlemek için çerezlerdeki
SameSiteözniteliğiniStrictveyaLaxolarak ayarlayın. - Özel Başlıklar: AJAX istekleri için, standart bir HTML formu tarafından ayarlanamayan özel bir başlık (örneğin
X-Requested-With) isteyin.
3. CORS (Siteler Arası Kaynak Paylaşımı)
SSRF ve CSRF’nin aksine, CORS kendi başına bir güvenlik açığı değil, bir güvenlik mekanizmasıdır. Sunucuların tarayıcıya şunu söylemesinin bir yoludur: “Bu belirli dış kökenin kaynaklarıma erişmesi sorun değil.”
Neden Var?
Varsayılan olarak tarayıcılar, bir sitedeki betiğin başka bir siteden veri okumasını engelleyen Aynı Köken Politikası’nı (SOP) uygular. Bu, evil.com‘un gmail.com üzerindeki e-postalarınızı okumasını engeller.
CORS, sunucuların bu politikayı güvenli bir şekilde esnetmesine olanak tanır. Bir web uygulaması siteler arası bir istek yaptığında, tarayıcı bir Origin başlığı gönderir. Sunucu Access-Control-Allow-Origin ile yanıt verir.
Yaygın Yanlış Yapılandırmalar
- Joker Karakter Köken (
*): Tüm kökenlere izin vermek. Genel API’ler için uygun olsa daAccess-Control-Allow-Credentials: trueile birleştirilirse tehlikelidir. - Kökeni Yansıtma: İzin verilen kökeni doğrulama yapmadan
Originbaşlığına göre dinamik olarak ayarlamak. Bu, SOP’yi tamamen devre dışı bırakır.
En İyi Uygulamalar
- Spesifik Olun: Sadece erişime ihtiyaç duyan belirli alan adlarına izin verin.
- Mümkünse Kimlik Bilgilerinden Kaçının: API’nizin çerezlere veya yetkilendirme başlıklarına ihtiyacı yoksa bunlara izin vermeyin.
- Güvenlik Ara Yazılımı Kullanın: Başlıkları manuel olarak yönetmek yerine CORS yapılandırmasını işlemek için iyi test edilmiş kütüphaneler kullanın.
Özet Karşılaştırma
| Özellik | SSRF | CSRF | CORS |
|---|---|---|---|
| Hedef | Sunucu tarafı kaynaklar | İstemci tarafı eylemler | Tarayıcı tabanlı veri erişimi |
| Kullanılan Zayıflık | Sunucunun ağ güveni | Tarayıcının çerez davranışı | Aynı Köken Politikası (yanlış yapılandırma) |
| Birincil Savunma | İzin listesi ve Doğrulama | Belirteçler ve SameSite Çerezleri | Doğru Başlık Yapılandırması |
Web güvenliğinin bu üç sütununu anlamak, sağlam ve modern uygulamalar oluşturmak için gereklidir. Derinlemesine savunma stratejileri uygulayarak hem sunucunuzun dahili altyapısını hem de kullanıcılarınızın özel verilerini koruyabilirsiniz.
Güvende kalın ve keyifli kodlamalar!