Rehber

Güvenlik başlıkları rehberi

HTTP güvenlik başlıkları, tarayıcılara web sitenize nasıl davranacaklarını söyler: yalnızca HTTPS kullanmak, hangi kaynakların yüklenebileceği ve sayfalarınızı kimin gömebileceği. Eklemesi ucuz, kontrol etmesi kolaydır.

Sitenizin gönderdiği başlıkları nasıl kontrol edersiniz

Sitenizi açın, ardından tarayıcınızın geliştirici araçlarını açın. Network (Ağ) sekmesinde ilk isteği (sayfanın kendisini) seçin ve yanıt başlıklarına bakın. Terminalden aynı bilgiyi şu komut gösterir:

curl -sI https://www.example.com/

Yalnızca ana sayfayı kontrol etmeyin: giriş, ödeme ve hata sayfaları çoğu zaman farklı sunulur.

Ayarlamaya değer başlıklar

Strict-Transport-Security

Tarayıcılara, max-age ile belirtilen süre boyunca alan adınız için yalnızca HTTPS kullanmalarını söyler. includeSubDomains’i yalnızca tüm alt alan adları HTTPS sunuyorsa ekleyin; preload seçeneğini ise geri alınması yavaş, uzun vadeli bir taahhüt olarak görün.

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

Content-Security-Policy

Betiklerin, stillerin, görsellerin ve diğer kaynakların nereden yüklenebileceğini listeler; böylece enjekte edilen içeriğin zararını sınırlar. Neyin bozulacağını görmek için Content-Security-Policy-Report-Only ile başlayın, sonra zorunlu hale getirin. frame-ancestors yönergesi sayfalarınızı kimin gömebileceğini belirler.

Content-Security-Policy: default-src 'self'; frame-ancestors 'none'

X-Content-Type-Options

Tarayıcıların, sunucunuzun bildirdiğinden farklı bir dosya türü tahmin etmesini engeller. Tek bir geçerli değeri vardır ve her yerde ayarlanması sorunsuzdur.

X-Content-Type-Options: nosniff

X-Frame-Options

Diğer sitelerin sayfalarınızı çerçeve içine almasını (clickjacking) önlemenin eski yolu. Yerini CSP frame-ancestors aldı; eski tarayıcılar için ikisini birlikte göndermek sorun değildir.

X-Frame-Options: DENY

Referrer-Policy

Ziyaretçi bir bağlantıyı izlediğinde mevcut URL’nin ne kadarının diğer sitelerle paylaşılacağını belirler. Bu değer diğer sitelere yalnızca kökeni gönderir; HTTPS’ten HTTP’ye geçerken hiçbir şey göndermez.

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

Permissions-Policy

Sitenizin kullanmadığı tarayıcı özelliklerini, gömülü üçüncü taraf içerik dahil kapatır.

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

Cross-Origin-Opener-Policy

Sayfalarınızı, diğer sitelerin açtığı pencerelerden ayrı, kendi tarama bağlamı grubunda tutar. Etkinleştirmeden önce açılır pencereye dayalı giriş ve ödeme akışlarını test edin.

Cross-Origin-Opener-Policy: same-origin

Kaldırılması veya azaltılması gereken başlıklar

  • X-Powered-By: Çoğu zaman PHP sürümünü tam olarak açığa çıkarır. php.ini dosyasında expose_php = Off ayarlayın.
  • Server: Web sunucusunu ve sürümünü açığa çıkarabilir. server_tokens off (nginx) veya ServerTokens Prod (Apache) ile azaltın.
  • X-XSS-Protection: Kullanımdan kaldırıldı ve güncel tarayıcılar tarafından yok sayılıyor. Kaldırın veya 0 gönderin.

Nerede ayarlanır

Başlıkları tek bir yerde ayarlayın; böylece hata sayfaları dahil her yanıt bunları alır:

  • nginx: server bloğunda, always parametresiyle add_header.
  • Apache: sanal sunucu (virtual host) veya .htaccess içinde Header always set (mod_headers).
  • PHP: sunucu yapılandırmasını değiştiremiyorsanız, herhangi bir çıktıdan önce header().
  • CDN veya barındırma paneli: birçoğu yanıt başlığı ayarı sunar; sunucunun ayarladığı başlıkları yinelemediğini kontrol edin.

Başlıkları birer birer devreye alın ve her seferinde siteyi yeniden kontrol edin. Özellikle katı bir Content-Security-Policy betikleri, analitiği veya gömülü içeriği bozabilir.

Başlıkların size söylemedikleri

İyi bir başlık notu bir katmandır, bir hüküm değildir. Eski bir PHP sürümü, açığı olan bir eklenti veya zayıf parolalar hakkında hiçbir şey söylemez. Başlıklar, TLS, çerezler ve e-posta kimlik doğrulama kayıtlarıyla birlikte Web Sitesi Güvenlik Denetimimizin bir parçasıdır.

Güvenlik Değerlendirmesi Al