Güvenlik başlıkları (security headers), sunucunuzun her sayfayla birlikte tarayıcıya gönderdiği kısa talimatlardır: "Bu siteyi yalnızca HTTPS ile aç", "Bu sayfayı başka sitelerin çerçevesinde gösterme", "Yalnızca şu adreslerden gelen betikleri çalıştır" gibi. Ziyaretçi bunları görmez, ama tarayıcı uyar. Doğru ayarlandıklarında oturum çalma, sahte sayfa içine gömme ve kötü amaçlı betik çalıştırma gibi saldırıların önemli bir kısmını zorlaştırırlar.

Bu başlıklar sitenizi tek başına güvenli yapmaz; güncel yazılım, güçlü şifreler ve yedek hâlâ temeldir. Ama birkaç satırlık ayarla eklenen, maliyeti çok düşük bir koruma katmanıdır. Bu rehberde en önemli altı başlığı, ne işe yaradıklarını ve nasıl ekleneceklerini anlatıyoruz.

Önce kontrol: sitenizde hangi başlıklar var?

Başlık eklemeden önce mevcut durumu görün. Tarayıcınızda sayfayı açın, geliştirici araçlarında (F12) Ağ sekmesine geçin, sayfayı yenileyin ve ilk isteğe tıklayın. "Yanıt başlıkları" bölümünde sunucunun gönderdiği her şey listelenir.

Daha hızlı bir yol: yönlendirme testi http ve https adreslerinizin doğru yönlendirilip yönlendirilmediğini ve HSTS başlığının olup olmadığını gösterir. Çerçeve izinlerini ayrıca iframe testi ile görebilirsiniz.

HSTS: tarayıcıya "her zaman HTTPS" demek

HSTS (HTTP Strict Transport Security), tarayıcıya bu siteye bundan sonra yalnızca şifreli bağlantıyla gitmesini söyler. Ziyaretçi adres çubuğuna "http://" yazsa veya eski bir bağlantıya tıklasa bile tarayıcı isteği kendiliğinden HTTPS'e çevirir. Böylece açık bir kafe Wi-Fi'ında araya giren birinin ilk şifresiz isteği yakalama fırsatı kalmaz.

Tipik bir değer şöyledir: Strict-Transport-Security: max-age=31536000; includeSubDomains

  • max-age saniye cinsinden süredir; 31536000 bir yıl demektir.
  • includeSubDomains kuralı tüm alt alan adlarına uygular.
  • preload eklenirse site, tarayıcıların yerleşik HSTS listesine başvurabilir.

Dikkat: HSTS geri alması zor bir ayardır. Bir alt alan adınızda (ör. eski bir panel) sertifika yoksa, includeSubDomains ile orası erişilemez hale gelir. Önce kısa bir süreyle (ör. max-age=300) deneyin, sorun yoksa uzatın. HSTS'ten önce HTTPS'in ve 301 yönlendirmelerinin kusursuz çalışması gerekir; bunun için ücretsiz SSL ile HTTPS'e geçiş ve www ve HTTPS yönlendirme rehberlerine bakın.

CSP: hangi betiğin çalışacağına siz karar verin

İçerik Güvenliği Politikası (Content Security Policy, CSP), sayfanızda hangi kaynaklardan betik, stil, görsel ve yazı tipi yüklenebileceğini tanımlar. Bir saldırgan yorum alanına veya eski bir eklentideki açıktan sayfanıza kötü amaçlı betik sokmayı başarsa bile, CSP o betiğin izinli olmayan bir adresten yüklenmesini veya satır içinde çalışmasını engelleyebilir.

Basit bir başlangıç örneği:

Content-Security-Policy: default-src 'self'; img-src 'self' data: https:; script-src 'self' https://www.googletagmanager.com

Bu kural; varsayılan olarak yalnızca kendi alan adınızdan kaynak yüklenmesine, görsellerin her HTTPS adresinden gelebilmesine ve betiklerin yalnızca sizden ve Google Etiket Yöneticisi'nden yüklenmesine izin verir.

CSP en güçlü ama en kolay bozulan başlıktır. Analitik, sohbet balonu, ödeme formu, video gibi üçüncü taraf hizmetlerin her biri ek izin ister. Bu yüzden:

  1. İlk olarak Content-Security-Policy-Report-Only adıyla ekleyin. Bu modda tarayıcı hiçbir şeyi engellemez, yalnızca konsolda neyin engelleneceğini yazar.
  2. Birkaç gün boyunca sitenin tüm sayfalarını gezin, konsoldaki uyarılara göre izin listesini tamamlayın.
  3. Uyarı kalmayınca başlığın adını gerçek CSP olarak değiştirin.

Çerçeve koruması: X-Frame-Options ve frame-ancestors

Bu başlıklar, sayfanızın başka sitelerin içinde iframe ile gösterilip gösterilemeyeceğini belirler. Amaç "tıklama tuzağı" (clickjacking) saldırısını önlemektir: saldırgan sizin sayfanızı görünmez bir çerçeveye koyup ziyaretçiyi farkında olmadan bir düğmeye tıklatmaya çalışır.

  • X-Frame-Options: SAMEORIGIN sayfanın yalnızca kendi sitenizde çerçevelenmesine izin verir; DENY hiçbir yerde izin vermez.
  • CSP içindeki frame-ancestors daha esnektir: belirli alan adlarına izin verebilirsiniz.

Burada bir denge var. Ödeme, giriş ve yönetim sayfalarınızın çerçevelenmesine kesinlikle izin vermeyin. Ama tanıtım yaptığınız bir platform sitenizi çerçeve içinde gösteriyorsa, tanıtılan sayfalarda o alan adına izin vermeniz gerekir. Ayrıntılı anlatım iframe engeli ve X-Frame-Options rehberinde.

Diğer üç kısa başlık

Bu üçü neredeyse hiçbir şeyi bozmaz, hemen ekleyebilirsiniz:

  • X-Content-Type-Options: nosniff — Tarayıcının dosya türünü tahmin etmesini engeller. Örneğin görsel diye yüklenen bir dosyanın betik gibi çalıştırılmasının önüne geçer.
  • Referrer-Policy: strict-origin-when-cross-origin — Ziyaretçi sitenizden başka bir siteye geçtiğinde, karşı tarafa tam adres yerine yalnızca alan adınızı gönderir. Adreste sipariş numarası veya arama terimi gibi bilgiler varsa bunların sızmasını önler. Analitikte yönlendiren site bilgisi korunur.
  • Permissions-Policy — Kamera, mikrofon, konum gibi tarayıcı özelliklerini kullanıp kullanmadığınızı bildirir. Kullanmıyorsanız kapatın: Permissions-Policy: camera=(), microphone=(), geolocation=()

Başlıkları nereye ekleyeceksiniz?

Sunucunuza ve barındırma türünüze göre değişir:

  • Apache ve paylaşımlı hosting: Kök dizindeki .htaccess dosyasına "Header always set" satırlarıyla eklenir. cPanel kullanan çoğu Türk hosting firmasında bu yöntem çalışır.
  • Nginx: Site yapılandırmasındaki server bloğuna "add_header ... always;" satırlarıyla eklenir, ardından yapılandırma yeniden yüklenir.
  • Cloudflare gibi bir CDN: Panelindeki yanıt başlığı kurallarıyla sunucuya dokunmadan eklenebilir.
  • WordPress: Güvenlik eklentilerinin çoğu bu başlıkları ayar ekranından ekler. Ama CSP'yi eklentiyle bile önce rapor modunda deneyin.
  • Node.js, PHP gibi uygulamalar: Başlıklar doğrudan uygulama kodunda veya bir ara katmanla verilebilir.

Her değişiklikten sonra ana sayfayı, bir iç sayfayı, iletişim formunu ve varsa ödeme adımını telefondan ve masaüstünden deneyin. Bir şey bozulduysa tarayıcı konsolu hangi başlığın neyi engellediğini yazar.

Trafik takasında dikkat edilecek nokta

organikhit.io'da sörf yapan üyeler sitenizi güvenli, kısıtlı bir çerçeve içinde görür. Siteniz X-Frame-Options: DENY veya izin vermeyen bir frame-ancestors kuralı gönderiyorsa sayfa çerçevede boş kalır ve ziyaretçi bir şey göremez. Çözüm, korumayı tamamen kaldırmak değil; yalnızca tanıttığınız sayfalarda çerçeveye izin vermek, giriş ve ödeme sayfalarını korumaya devam etmektir. WordPress kullanıyorsanız eklentideki isteğe bağlı çerçeve izni bu ayarı sizin yerinize yapar. Sitenizin teknik sağlığını diğer sitelerle karşılaştırmak için web sağlığı raporu da fikir verir.

Tanıtıma başlamadan önce güvenlik başlıklarını, HTTPS'i ve yönlendirmeleri birlikte kontrol etmek için tanıtımdan önce teknik kontrol listesi iyi bir başlangıçtır.

Sık sorulan sorular

Güvenlik başlıkları Google sıralamasını etkiler mi?

Doğrudan bir sıralama etkisi beklemeyin. HTTPS bir sinyal olarak bilinir, ama CSP veya Referrer-Policy eklemek sizi üst sıraya taşımaz. Asıl kazanç, sitenizin ele geçirilme riskinin azalmasıdır; ele geçirilen ve zararlı içerik barındıran siteler ise arama sonuçlarında uyarıyla gösterilebilir.

CSP ekledim, site bozuldu. Ne yapmalıyım?

Başlığı hemen Report-Only moduna geri alın; site eski haline döner. Ardından tarayıcı konsolundaki uyarıları okuyun: hangi adresin engellendiği yazar. O adresi ilgili kurala (script-src, style-src, img-src gibi) ekleyip yeniden deneyin. Satır içi betikler için kuralı gevşetmek yerine betiği ayrı dosyaya taşımak daha güvenlidir.

Küçük bir blog için bunların hepsi gerekli mi?

HTTPS ve HSTS, X-Content-Type-Options ve Referrer-Policy her site için az emekli ve risksiz adımlardır. CSP daha fazla bakım ister; çok sayıda eklenti ve üçüncü taraf hizmet kullanan küçük bir blogda rapor modunda başlayıp zamanla sıkılaştırmak makul bir yoldur.

Sitenizin karnesini çıkarın