TB
← Tüm yazılar

Web güvenlik basliklari

Content-Security-Policy, HSTS, X-Frame-Options ve diger HTTP güvenlik basliklarinin web uygulamalarini XSS, clickjacking ve MIME sniffing saldirilarina karşı nasil korudugunu detayli inceliyoruz.

HTTP güvenlik basliklari, tarayiciya sunucudan gelen ek talimatlar vererek yaygın web saldirilarina karşı savunma katmanı oluşturur. Bu basliklar uygulama kodundan bagimsiz çalışır; doğru yapilandirildiginda XSS, clickjacking, MIME sniffing ve bilgi sizintisi gibi tehditleri azaltir. Asagida üretim ortaminda mutlaka degerlendirilmesi gereken basliklar ve yapılandırma ornekleri yer alir.

Content-Security-Policy (CSP)

CSP, hangi kaynaklardan script, stil, görsel ve font yuklenebilecegini tanimlar. Inline script ve eval kullanımını kisitlayarak XSS etkisini daraltir.

Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-abc123'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-ancestors 'none'

CSP modlari

  • Report-Only: Ihlalleri raporlar, engellemez. Geçiş asamasinda kullanılır.
  • Enforce: Ihlal eden kaynaklar engellenir.
  • Nonce ve hash: Belirli inline scriptlere izin verir.

CSPyi adim adim sikilastirmak en güvenli geçiş yoludur. Once report-only modda ihlalleri analiz edin, ardindan enforce moduna gecin.

Strict-Transport-Security (HSTS)

HSTS, tarayiciya belirli sure boyunca yalnizca HTTPS uzerinden baglanmasini soyler. SSL stripping saldirilarini onler.

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Preload listesine eklenmek icin max-age en az bir yil olmali ve includeSubDomains dahil edilmelidir. HTTP uzerinden HSTS basligi gonderilmemelidir; yalnizca güvenli baglantida aktif olmalidir.

X-Frame-Options ve frame-ancestors

Clickjacking saldirilarinda saldirgan sitenizi iframe icinde gostererek kullanıcıyı kandirir. X-Frame-Options: DENY veya SAMEORIGIN bu riski azaltir. Modern yaklaşım CSP frame-ancestors direktifidir.

Content-Security-Policy: frame-ancestors 'none'

X-Content-Type-Options

X-Content-Type-Options: nosniff tarayicinin Content-Type tahminini engeller. Örneğin bir görsel dosyasi icinde gizlenmis script calistirilmasini onler.

Referrer-Policy

Referrer basligi, hangi URL bilgisinin dis sitelere gonderilecegini kontrol eder. Hassas query parametrelerinin sizmasini onlemek icin strict-origin-when-cross-origin veya daha kisitlayici degerler tercih edilir.

Referrer-Policy: strict-origin-when-cross-origin

Permissions-Policy

Eski Feature-Policynin yerini alan bu baslik, kamera, mikrofon, geolocation gibi tarayici APIlerinin kullanımını kisitlar.

Permissions-Policy: camera=(), microphone=(), geolocation=(self)

Cross-Origin basliklari

Cross-Origin-Opener-Policy (COOP)

Cross-Origin-Opener-Policy: same-origin pencere referanslarini izole ederek Spectre benzeri saldirilarda veri sizintisi riskini azaltir.

Cross-Origin-Resource-Policy (CORP)

Kaynaklarin hangi originlerden yuklenebilecegini belirler. same-origin veya cross-origin degerleri kullanılır.

Cross-Origin-Embedder-Policy (COEP)

require-corp ile cross-origin kaynaklarin explicit izin vermeden yuklenmesini engeller. SharedArrayBuffer gibi güçlü APIler icin gereklidir.

Cache-Control ve hassas veri

Oturum iceren veya kişisel sayfalarda Cache-Control: no-store kullanın. Paylasilan cachelerde hassas veri kalmasini onler.

ASP.NET Core ve reverse proxy yapilandirmasi

Güvenlik basliklari uygulama middlewareinde veya nginx, Cloudflare gibi reverse proxy katmaninda eklenebilir. Merkezi yönetim icin proxy katmanı tercih edilebilir.

app.Use(async (context, next) => {
  context.Response.Headers["X-Content-Type-Options"] = "nosniff";
  context.Response.Headers["X-Frame-Options"] = "DENY";
  await next();
});

Test ve dogrulama

Mozilla Observatory, securityheaders.com ve tarayici geliştirici araclari baslik varligini ve degerlerini kontrol eder. E2E testlerde response header assertionlari CI pipelineina eklenebilir.

CSP direktifleri derinlemesine

Content-Security-Policy birden fazla direktiften olusur ve her biri farklı kaynak turunu kontrol eder. default-src diger direktifler icin fallback gorevi görür. script-src JavaScript kaynaklarini, connect-src fetch ve XHR hedeflerini, img-src görsel kaynaklarini sınırlar.

  • base-uri document.baseURI manipulasyonunu engeller.
  • form-action form gonderim hedeflerini kisitlar.
  • upgrade-insecure-requests HTTP isteklerini HTTPSye yukseltir.
  • block-all-mixed-content karisik içeriği tamamen engeller.

Inline event handler (onclick) CSP strict modunda calismaz; addEventListener kullanımı zorunlu hale gelir. Bu değişiklik mevcut kod tabaninda refaktoring gerektirebilir ancak XSS yuzeyini daraltir.

Nginx ve Cloudflare ornekleri

Reverse proxy katmaninda baslik eklemek uygulama kodundan bagimsiz merkezi yönetim sağlar.

add_header Content-Security-Policy "default-src 'self'" always;
add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options "nosniff" always;

Cloudflare Transform Rules veya Workers ile dinamik nonce enjekte edilebilir. Edge katmaninda baslik yönetimi deploy sikligini azaltir.

Güvenlik basliklari ozeti

  1. CSP ile kaynak yükleme politikasini tanimlayin.
  2. HSTS ile HTTPS zorunlulugunu saglayin.
  3. Clickjacking icin frame-ancestors veya X-Frame-Options kullanın.
  4. nosniff ile MIME sniffing engelleyin.
  5. Referrer-Policy ve Permissions-Policy ile bilgi sizintisini sinirlayin.
  6. Cross-origin izolasyon basliklarini degerlendirin.
  7. Basliklari otomatik testlerle dogrulayin.

Güvenlik basliklari tek basina yeterli degildir; input validation, authentication ve dependency guncellemeleri ile birlikte defense-in-depth yaklasiminin parcasidir. Ancak doğru yapilandirildiginda düşük maliyetle yüksek koruma saglarlar.

Subresource Integrity (SRI)

CDN uzerinden yuklenen harici scriptler degistirilirse supply chain saldirisi olusabilir. SRI hash degeri ile tarayici dosyanin beklenen icerikte oldugunu dogrular.

<script src="https://cdn.example.com/lib.js" integrity="sha384-..." crossorigin="anonymous"></script>

Clear-Site-Data

Çıkış isleminde veya hesap silmede Clear-Site-Data basligi tarayici cache, cookie ve depolama alanini temizler. Hassas uygulamalarda oturum sonlandirma güvenliğini artirir.

Baslik sırası ve override

Reverse proxy, CDN ve uygulama katmanları farklı basliklar ekleyebilir. Cakisan degerler beklenmedik davranisa yol acar. Tek bir katmanda merkezi yönetim ve otomatik testler tutarlılığı korur.

OWASP ile ilişki

Güvenlik basliklari OWASP Secure Headers projesinde belgelenmistir. A01 Broken Access Control ve A03 Injection gibi riskler basliklarla tamamen cozulmez ancak XSS ve clickjacking gibi vektorlerde önemli azaltim sağlar.

Cookie güvenliği

Güvenlik basliklari cookie nitelikleriyle birlikte dusunulmelidir. HttpOnly, Secure ve SameSite nitelikleri oturum güvenliğini destekler. Strict SameSite CSRF riskini azaltir ancak cross-site entegrasyonlari etkileyebilir.

Reporting API

CSP ve COOP ihlalleri Reporting-Endpoints ve Report-To basliklari ile merkezi loglama sistemine gonderilebilir. Bu raporlar politika sikilastirma sürecinde degerli veri sağlar.

Güvenlik basliklari ve performans

Bazi basliklar ek kontrol maliyeti getirir ancak genel performans etkisi düşüktür. CSP nonce uretimi sunucu tarafinda minimal overhead ekler. HSTS preload listesi tarayici icinde tutuldugundan ek istek gerektirmez.

Helmet ve middleware entegrasyonu

Node.js Helmet kutuphanesi ve ASP.NET Core güvenlik middlewareleri yaygın basliklari tek noktadan yönetir. Varsayilan degerler baslangic noktasi olmali, uygulama ihtiyacina gore ozellestirilmelidir. Her ortam icin ayri CSP whitelist tanimi onerilir.

Baslik test otomasyonu

Playwright veya supertest ile response header assertionlari CI pipelineina eklenir. Deploy sonrasi smoke test güvenlik basliklarinin varligini dogrular. Regresyon durumunda build fail edilir.

Clickjacking ve UI redressing

frame-ancestors ve X-Frame-Options dışında overlay saldirilarina karşı UI dikkatli tasarlanmali. Kritik islemlerde re-authentication ve onay adimlari ek savunma sağlar. Güvenlik basliklari bu katmanla birlikte dusunulmelidir.

Information disclosure

Server, X-Powered-By ve X-AspNet-Version gibi basliklar teknoloji stack bilgisini ifsa eder. Bunlar kaldirilmali veya generic degerlerle degistirilmelidir. Bilgi sizintisi saldirganin hedef secimini kolaylastirir.

Uygulama katmaninda tutarlılık

Statik dosyalar, API yanitlari ve hata sayfalari ayni güvenlik baslik setini almali. Eksik baslik iceren tek bir endpoint zafiyet olusturabilir. Middleware zincirinde baslik ekleme işlemi tüm response turleri icin calistigindan emin olun. Periyodik güvenlik taramalari ve penetration test bulgulari baslik yapilandirmasini güncel tutar. Health check endpointleri bile minimum güvenlik basliklarini almalidir. Bu tutarlılık saldirganin zayif nokta aramasini her zaman zorlastirir.

Basliklar ve uyumluluk

PCI DSS, GDPR ve sektor regulasyonlari bazi güvenlik kontrollerini zorunlu kilabilir. HSTS, güvenli cookie nitelikleri ve cache politikasi bu gereksinimlerle uyumlu olmalidir. Denetim oncesi baslik envanteri cikarilmali ve eksikler giderilmelidir. Güvenlik basliklari denetim raporlarinda somut kanit olarak sunulabilir. Duzenli penetration test sonuclari ile birlikte degerlendirildiginde defense-in-depth stratejisinin etkinligini gösterir. Baslik yapilandirmasi her major release oncesi otomatik testlerle dogrulanmali ve değişiklikler changelogda belirtilmelidir.