Web sitesi güvenlik başlıklarını yapılandırma

CSP, HSTS ve X-Frame-Options güvenlik başlıklarını doğru şekilde ayarlayarak WordPress sitenizin güvenliğini katlayın; sitenizin işlevlerini bozmadan.

7 dk Güncellendi 10 Oct 2026

Güvenlik Başlıkları Siteniz İçin Neden Hayati Önem Taşır?

Bir kullanıcının tarayıcısı sunucunuza her istek gönderdiğinde, sunucu ana içeriğin yanı sıra bir dizi HTTP başlığı da gönderir. Bu başlıklar tarayıcıya içeriği nasıl işleyeceğini söyler. Ancak bu başlıkların birçoğu güvenlik rolü üstlenir ve tarayıcıya bilinmeyen kaynaklardan script çalıştırma veya sitenizi harici bir iframe içinde gösterme gibi riskli davranışları engellemesini emreder.

Ne yazık ki, WordPress'in ve birçok paylaşımlı hosting sağlayıcısının varsayılan ayarları bu güvenlik başlıklarını etkinleştirmez. Bunun sonucunda siteniz XSS (Cross-Site Scripting), Clickjacking ve MIME Sniffing gibi yaygın saldırılara karşı savunmasız kalır. Bu makalede, sitenizin işlevlerini bozmadan en önemli güvenlik başlıklarını nasıl etkinleştireceğinizi adım adım öğreneceksiniz.

Ayarlamanız Gereken En Önemli Güvenlik Başlıkları

Aşağıdaki üç başlık sitenizin güvenliği üzerinde en büyük etkiye sahiptir ve yanlış ayarlanmaları durumunda siteyi çalışmaz hale getirebilir. Bu yüzden adımları dikkatle izleyin.

1. Content-Security-Policy (CSP) Başlığı

Content-Security-Policy başlığı tarayıcıya script, stil, görsel veya font yüklemek için hangi kaynakların yetkili olduğunu söyler. Bir saldırgan sitenize kötü amaçlı bir script enjekte edebilirse (örneğin doğrulamasız bir form aracılığıyla), CSP bunun çalışmasını engeller.

Başlamak için basit ve güvenli bir örnek:

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://code.jquery.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self'

Bu örnekte:

  • default-src 'self' tüm kaynakların yalnızca kendi alan adınızdan yüklenmesi anlamına gelir.
  • script-src dahili scriptlerin ve CDN'den jQuery scriptlerinin çalışmasına izin verir.
  • 'unsafe-inline' satır içi stiller ve bazı WordPress scriptleri için gereklidir, ancak gelecekte bunu kaldırmaya çalışın.
  • img-src herhangi bir HTTPS kaynağından görsel yüklenmesine izin verir.

Yaygın hata: WordPress eklentileriniz satır içi scriptler kullanıyorsa (birçok slider ve sayfa oluşturucu eklentisi böyledir), 'unsafe-inline' kaldırmak sitenizin tamamen çalışmamasına neden olur. Her zaman önce test modunda ayarlayın.

2. Strict-Transport-Security (HSTS) Başlığı

Strict-Transport-Security başlığı tarayıcıya sitenizin yalnızca HTTPS üzerinden erişilebilir olduğunu ve asla HTTP kullanmaması gerektiğini söyler. Bu başlık Man-in-the-Middle saldırılarını önler.

Örnek ayar:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  • max-age=31536000 tarayıcının bu kuralı bir yıl boyunca hatırlaması anlamına gelir.
  • includeSubDomains alt alan adlarının da HTTPS olması gerektiğini belirtir.
  • preload modern tarayıcılara bu alan adını HSTS listelerine kaydetmelerini söyler.

Önemli not: includeSubDomains etkinleştirmeden önce tüm alt alan adlarınızın (örneğin mail.example.com veya blog.example.com) geçerli SSL sertifikalarına sahip olduğundan emin olun. Aksi takdirde, kullanıcılar bu alt alan adlarına erişemez.

3. X-Frame-Options Başlığı

X-Frame-Options başlığı Clickjacking saldırılarını önler. Bu saldırıda, saldırgan sitenizi şeffaf bir iframe içine yerleştirir ve kullanıcı kendi sitesinin düğmelerine tıkladığını sanarken aslında saldırganın sitesindeki düğmelere tıklar.

Güvenli ayar:

X-Frame-Options: SAMEORIGIN

Bu değer tarayıcıya yalnızca aynı alan adındaki sayfaların sitenizi iframe içinde gösterebileceğini söyler. Sitenizin başka bir alan adında (örneğin bir ödeme paneli) gösterilmesi gerekiyorsa ALLOW-FROM https://example.com kullanabilirsiniz, ancak bu değer modern tarayıcılarda desteklenmez ve CSP'de frame-ancestors kullanmak daha iyidir.

WordPress'te Güvenlik Başlıkları Nasıl Etkinleştirilir?

Güvenlik başlıklarını etkinleştirmek için üç ana yöntem vardır. Sunucu erişim seviyenize bağlı olarak bu yöntemlerden birini seçin.

Yöntem 1: .htaccess Dosyasını Kullanma (En Basit Yöntem)

Apache kullanıyorsanız, aşağıdaki kodu sitenizin kök dizinindeki .htaccess dosyasının sonuna ekleyin:

<IfModule mod_headers.c>
  Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://code.jquery.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self'"
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header set X-Content-Type-Options "nosniff"
  Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

Değişiklikleri uyguladıktan sonra siteyi gizli modda bir tarayıcıyla açın ve securityheaders.com gibi çevrimiçi araçlarla başlıkların doğru gönderildiğini kontrol edin.

Yöntem 2: WordPress Eklentisi Kullanma

Sunucu dosyalarına erişiminiz yoksa veya kod yazmak istemiyorsanız, Wordfence veya Really Simple SSL gibi güvenlik eklentilerini kullanabilirsiniz. Bu eklentiler genellikle güvenlik ayarları bölümünde güvenlik başlıklarını etkinleştirme seçeneği sunar.

Ancak dikkat edin, eklentiler bazen CSP ayarlarını çok katı uygulayabilir ve sitenizi çalışmaz hale getirebilir. Etkinleştirdikten sonra her zaman sitenizin tüm sayfalarını test edin.

Yöntem 3: Sunucu Seviyesinde Ayarlama (Nginx)

Nginx kullanıyorsanız, aşağıdaki kodu yapılandırma dosyasındaki server bloğuna ekleyin:

add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://code.jquery.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self'";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Değişiklikleri uyguladıktan sonra Nginx'i yeniden başlatın:

sudo systemctl reload nginx

Unutmamanız Gereken Ek Güvenlik Başlıkları

Üç ana başlığa ek olarak, sitenizin güvenliğini önemli ölçüde artıran birkaç başlık daha vardır.

X-Content-Type-Options

Bu başlık MIME Sniffing saldırılarını önler. Bu saldırıda, tarayıcı dosya türünü Content-Type başlığı yerine içeriğinden tahmin etmeye çalışır. Bu, kötü amaçlı dosyaların çalıştırılmasına yol açabilir.

X-Content-Type-Options: nosniff

Referrer-Policy

Bu başlık, bağlantılara tıkladığınızda sayfa adresinizden hedef siteye hangi bilgilerin gönderileceğini kontrol eder. strict-origin-when-cross-origin ayarı gizlilik ve kullanılabilirlik arasındaki en iyi dengeyi sağlar.

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

Permissions-Policy

Bu başlık, sitenizde kamera, mikrofon ve GPS gibi tarayıcı özelliklerini kısıtlamanıza olanak tanır. Bu, kötü amaçlı scriptlerin kötüye kullanımını önler.

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

Güvenlik Başlığı Ayarlamada Yaygın Hatalar

Bu bölümde, güvenlik başlıklarını ayarlarken yapılan en yaygın hataları inceleyeceğiz, böylece siz bunlara düşmezsiniz.

Hata 1: Tam HTTPS'ten Emin Olmadan HSTS'yi Etkinleştirmek

Siteniz hâlâ HTTP üzerinde çalışıyorsa veya SSL sertifikanız tüm alt alan adları için geçerli değilse, HSTS'yi etkinleştirmek kullanıcıların sitenize erişememesine neden olur. Tarayıcı, max-age'de belirttiğiniz süre boyunca (bir yıl veya başka bir süre) sitenize HTTP üzerinden bağlanmayı engeller.

Hata 2: CSP'yi Çok Katı Ayarlamak

Birçok WordPress sitesi satır içi scriptler ve dinamik stiller kullanır. CSP'yi çok katı ayarlarsanız siteniz düzgün görüntülenmez. Çözüm, önce Content-Security-Policy-Report-Only değeriyle başlamaktır; bu yalnızca hataları raporlar ve siteyi çalışmaz hale getirmez:

Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' 'unsafe-inline'; report-uri /csp-violation-endpoint

Birkaç gün raporları inceledikten sonra gerekli kaynakları izin listesine ekleyebilir ve ardından başlığı normal moda değiştirebilirsiniz.

Hata 3: Önbelleğe Alınmış Sayfalarda Başlıkları Unutmak

W3 Total Cache gibi bir önbellek eklentisi kullanıyorsanız, güvenlik başlıkları önbelleğe alınmış sayfalarda uygulanmayabilir. Başlıkları ayarladıktan sonra site önbelleğini mutlaka temizleyin ve tekrar kontrol edin.

Özet ve Sonraki Adımlar

Güvenlik başlıklarını ayarlamak, sitenizin güvenliğini artırmanın en basit ve en etkili yollarından biridir. Üç ana başlığı (CSP, HSTS ve X-Frame-Options) ve birkaç ek başlığı uygulayarak en yaygın web saldırılarını önleyebilirsiniz.

Ayarların doğruluğundan emin olmak için securityheaders.com ve Mozilla Observatory gibi çevrimiçi araçları kullanın. Bu araçlar size puan verir ve iyileştirme için belirli öneriler sunar.

Sitenizin güvenliği için daha kapsamlı bir çözüm arıyorsanız, ServerNet gelişmiş güvenlik ayarlarıyla web hosting hizmetleri sunar ve bu başlıkların sunucu seviyesinde uygulanmasına yardımcı olabilir. Ancak unutmayın ki basit bir paylaşımlı hostingde bile bu makalede anlatılan yöntemlerle sitenizin güvenliğini önemli ölçüde artırabilirsiniz.

Son olarak, güvenliğin bir varış noktası değil, bir süreç olduğunu unutmayın. Güvenlik başlıklarını ayarlayın, sitenizi düzenli olarak test edin ve WordPress ile eklentilerinizin en son güvenlik güncellemelerini ihmal etmeyin.

Bu sayfa yardımcı oldu mu?