Web uygulamaları günümüzde siber saldırıların en sık hedef aldığı sistemler arasında yer alıyor. Geliştiriciler ve sistem yöneticileri için güvenli bir uygulama inşa etmek, sadece güvenli kod yazmaktan çok daha fazlasını gerektiriyor. Bu noktada, çoğu zaman gözden kaçan ancak etkisi büyük olan bir detay devreye giriyor: HTTP güvenlik başlıkları. OWASP tarafından önerilen bu başlıklar sayesinde web sitenizi XSS, Clickjacking ve diğer yaygın tehditlere karşı koruma altına alabilirsiniz. Bu yazıda, web güvenliğini artıran HTTP başlıklarını detaylarıyla inceleyerek hem neden önemli olduklarını hem de nasıl uygulanmaları gerektiğini öğreneceksiniz.
1. X-Frame-Options — Clickjacking Saldırılarına Geçit Yok
Tıkladığınız bir buton sizi beklemediğiniz bir sonuca götürdüyse, muhtemelen Clickjacking saldırısının kurbanı olmuşsunuzdur. Saldırganlar, sitenizi bir iframe içine gizlice yerleştirerek kullanıcıyı manipüle edebilir.
Bu riski ortadan kaldırmak için:
X-Frame-Options: DENY
Dilerseniz SAMEORIGIN değeriyle sadece kendi alan adınızdan gelen iframe’lere izin verebilirsiniz. Daha gelişmiş kontrol için Content-Security-Policy içindeki frame-ancestors direktifini kullanmanız önerilir.
2. X-Content-Type-Options —MIME Sniffing’e Son
Tarayıcılar bazen gelen içeriğin türünü “tahmin etmeye” çalışır. Ancak bu özellik, saldırganların dosya türlerini kandırarak zararlı içerik sunmasına neden olabilir.
Bu yüzden:
X-Content-Type-Options: nosniff
demeniz yeterli. Tarayıcı, içerik türüne olduğu gibi alır ve kendi tahminlerine başvurmaz.
3. X-XSS-Protection — Artık Emekli Oldu
Bu başlık, özellikle eski tarayıcılarda XSS saldırılarını önlemeye çalışırdı. Ancak günümüzde modern tarayıcılar bu başlığa güvenmek yerine CSP gibi daha sağlam çözümleri tercih ediyor.
Ne yapmalı?
X-XSS-Protection: 0
Böylece eski tarayıcıların sorunlu XSS filtrelerini tamamen devre dışı bırakmış olursunuz.
4. Strict-Transport-Security (HSTS) — HTTPS’ten Asla Vazgeçmeyin
Kullanıcınız sitenize ilk kez geldiğinde http:// ile mi başladı? Bir saldırgan için bu fırsata dönüşebilir. Bu başlık sayesinde tarayıcıya “beni sadece HTTPS ile çağır” deme şansı verirsiniz.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Bu satırla:
-
Tüm bağlantılar 1 yıl boyunca sadece HTTPS üzerinden yapılır,
-
Alt domainler de kapsanır
5. Content-Security-Policy (CSP) — Modern Güvenliğin Temel Taşı
Script’lerinizi yalnızca kendi sunucunuzdan ve belirli bir CDN’den yüklemek istiyorsanız:
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com
Yani tarayıcıya net bir mesaj veriyorsunuz: “İçerik sadece şuradan, şuradan ve benden gelsin.” Bu başlık sayesinde XSS, veri enjeksiyonu, kötü amaçlı kaynaklar gibi bir sürü beladan kurtulabilirsiniz.
6. Referrer-Policy — Kullanıcının Arkasından Ne Geldiğini Bilmek Zorunda Değilsin
Siteler arası geçişlerde tarayıcılar “nereden geldim” bilgisini Referer başlığıyla paylaşır. Bu bilgi, bazen URL’lerde token ya da kullanıcı bilgisi içerdiğinden problem yaratabilir.
Bunun önüne geçmek için:
Referrer-Policy: no-referrer
diyerek gizliliği maksimum düzeye çıkarabilirsiniz.
7. Permissions-Policy — Kamera? Mikrofon? Hayır, Teşekkürler
Modern tarayıcılar, kullanıcıdan çok fazla şey talep edebilir: kamera, mikrofon, konum, tam ekran… Ancak bunların gerçekten gerekli olmadığından eminseniz hepsini kapatmak mümkün.
Örnek:
Permissions-Policy: geolocation=(), microphone=()
Bu yapılandırmayla “bu site senden hiçbir ekstra izin istemeyecek” demiş olursunuz.
8. Access-Control-Allow-Origin — CORS Kapılarını Kimlere Açıyorsunuz?
CORS başlıkları, web API’lerinizi başka alan adlarının kullanıp kullanamayacağını belirler. Eğer “*” ile herkese izin verirseniz, kontrolsüz erişim açmış olursunuz.
Doğru yaklaşım:
Access-Control-Allow-Origin: https://trustedsite.com
Yani API’nize sadece belirli kaynaklardan erişim izni verin. Ne kadar az, o kadar güvenli.
Güvenlik Başlıklarınızı Test Etmek İster Misiniz?
Aşağıdaki araçlarla sitenizin güvenlik başlıklarını kontrol edebilirsiniz:
-
Tarayıcı geliştirici araçlarındaki “Network” sekmesi
Sonuç: Güvenlik Konfigürasyonda Gizlidir
Sunucu tarafında, yapılandırma düzeyinde alınan basit ama etkili önlemler sizi birçok saldırıdan koruyabilir.
HTTP güvenlik başlıkları, uygulamanız için görünmeyen ama son derece güçlü bir kalkan olabilir. OWASP’in önerilerini dikkate alarak sistemlerinizi bu görünmeyen tehditlere karşı daha dirençli hale getirin.