WordPress Güvenlik Başlıkları: X-Frame-Options, HSTS ve CSP Sorunsuz Entegrasyon
te güvenlik başlıklarını HSTS WordPress güvenlik başlıkları HSTS, X-Frame-Options, Referrer-Policy, Content-Security-Policy gibi HTTP response header’larını doğru şekilde yapılandırmak, sitenizin saldırılara karşı korunmasını sağlarken Google ve Yandex doğrulama dosyalarının, CDN üzerinden gelen FontAwesome, Google Fonts ve Analytics gibi entegrasyonların bozulmaması için kritik öneme sahiptir.
Güvenlik Başlıklarının Önemi ve SEO’ya Etkisi
Güvenlik başlıkları, ziyaretçilerin tarayıcılarına sitenizin hangi güvenlik politikalarını uyguladığını açıkça bildirir ve sitenizin güvenliğini üst seviyeye taşır. X-Frame-Options, sitenizin başka bir site içinde iframe olarak yüklenmesini engelleyerek clickjacking saldırılarına karşı koruma sağlar. HSTS (Strict-Transport-Security) ile kullanıcıların sitenize yalnızca HTTPS üzerinden erişmesini zorunlu kılar ve SSL strip saldırılarını engeller. Referrer-Policy ise kullanıcı yönlendirmelerinde gönderilen referans bilgisini sınırlandırarak veri sızıntısını önler. Content-Security-Policy (CSP), zararlı scriptlerin çalıştırılmasını, XSS (cross-site scripting) ve veri hırsızlığını engeller. Tüm bu başlıkların doğru şekilde eklenmesi, arama motorlarının sitenizi güvenli olarak algılamasını sağlar ve SEO performansınızı olumlu yönde etkiler. Eksik veya hatalı başlıklar ise Google Search Console ve çeşitli güvenlik testlerinde uyarı olarak karşınıza çıkar, sıralamanıza olumsuz yansır.
Senaryo 1: Apache ve .htaccess ile Güvenlik Başlıkları Ekleme
Apache tabanlı WordPress sitelerinde güvenlik başlıklarının eklenmesi için .htaccess dosyası üzerinden aşağıdaki örnek yapılandırmayı kullanabilirsiniz:
# HSTS
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# X-Frame-Options
Header always set X-Frame-Options "SAMEORIGIN"
# Referrer Policy
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Content Security Policy (Report-Only, kademeli sıkılaşma için)
Header always set Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' https://fonts.googleapis.com https://cdnjs.cloudflare.com; font-src 'self' https://fonts.gstatic.com https://cdnjs.cloudflare.com; img-src *; report-uri /csp-report;"
Dikkat: CSP başlığını ilk aşamada Report-Only modunda kullanmak en iyi uygulamadır. Böylece, tarayıcı olası ihlalleri raporlar ancak engelleme yapmaz. Google Analytics, GTM, Google Fonts, FontAwesome gibi servislerin adreslerini ilgili alanlara eklemezseniz site işlevselliğinde bozulmalar yaşanabilir. Raporları analiz ederek CSP’yi zamanla sıkılaştırabilirsiniz.
Senaryo 2: Nginx ile Güvenlik Başlıkları Ekleme
Nginx sunucusu kullanan WordPress sitelerinde, server bloğuna aşağıdaki satırları ekleyebilirsiniz:
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# X-Frame-Options
add_header X-Frame-Options "SAMEORIGIN" always;
# Referrer Policy
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Content Security Policy (Report-Only)
add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' https://fonts.googleapis.com https://cdnjs.cloudflare.com; font-src 'self' https://fonts.gstatic.com https://cdnjs.cloudflare.com; img-src *; report-uri /csp-report;" always;
Her değişiklikten sonra Nginx servisini yeniden başlatmayı unutmayın. CSP’yi sıkılaştırmadan önce rapor dosyalarını analiz edin, gerekli adresleri izinli kaynaklara ekleyin. Aksi takdirde, bazı scriptler veya fontlar engellenebilir ve site işlevselliği bozulabilir.
Senaryo 3: Cloudflare ile Güvenlik Başlıkları Yönetimi
Cloudflare kullanan WordPress sitelerinde, Response Headers bölümünden veya Cloudflare Workers ile özel başlıklar ekleyebilirsiniz. Aşağıda örnek bir Worker scripti bulunmaktadır:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const response = await fetch(request)
const newHeaders = new Headers(response.headers)
newHeaders.set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload')
newHeaders.set('X-Frame-Options', 'SAMEORIGIN')
newHeaders.set('Referrer-Policy', 'strict-origin-when-cross-origin')
newHeaders.set('Content-Security-Policy-Report-Only', "default-src 'self'; script-src 'self' https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' https://fonts.googleapis.com https://cdnjs.cloudflare.com; font-src 'self' https://fonts.gstatic.com https://cdnjs.cloudflare.com; img-src *; report-uri /csp-report;")
return new Response(response.body, {status: response.status, statusText: response.statusText, headers: newHeaders})
}
Cloudflare ile sunucuya erişmeden başlıkları merkezi olarak yönetebilirsiniz. CSP’yi önce Report-Only olarak uygulayın, sitenizin işlevselliğini test edin ve raporlar doğrultusunda gerekli CDN veya doğrulama kaynaklarını eklemeyi unutmayın.
Content-Security-Policy ve Harici Servislerle Uyum
Content-Security-Policy (CSP), sitenizde hangi kaynaklardan hangi tür içeriklerin yüklenebileceğini belirler ve XSS gibi saldırılara karşı etkin koruma sağlar. CSP kurgularken özellikle harici CDN’lerden gelen font, stil ve script dosyalarını doğru şekilde tanımlamak gerekir. Örnek CSP başlığı:
Content-Security-Policy: default-src 'self'; script-src 'self' https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' https://fonts.googleapis.com https://cdnjs.cloudflare.com; font-src 'self' https://fonts.gstatic.com https://cdnjs.cloudflare.com; img-src *;
Burada script-src alanına Google Analytics, GTM, style-src ve font-src alanlarına Google Fonts ve CDN’ler, img-src ise tüm kaynaklardan görsel yüklenmesine izin verir. Eğer FontAwesome veya başka bir CDN kullanıyorsanız, ilgili CDN adresini style-src ve font-src bölümlerine eklemelisiniz. Google/Yandex doğrulama için meta etiketine ayrıca izin eklemeye gerek yoktur; çünkü 'self' ana dizini kapsar.
CSP’yi Report-Only Modda Başlatmak Neden Önemli?
CSP’yi doğrudan sıkı modda uygulamak, sitenizde beklenmeyen hatalara ve bozulmalara yol açabilir. Özellikle WordPress temalarında veya eklentilerinde harici JS, CSS ve font kullanımı sık olduğundan, ilk aşamada CSP’yi Report-Only modda başlatmak gerekir. Tarayıcılar, ihlalleri raporlar ve siz de report-uri ile tüm ihlal loglarını toplarsınız. Raporları gözden geçirip, eksik kalan kaynakları izinli listelere ekledikten sonra, CSP başlığını aktif moda alabilirsiniz. Bu kademeli geçiş, site işlevselliğini kaybetmeden maksimum güvenlik sağlar.
En Sık Yapılan Hatalar ve Çözüm Yöntemleri
- Güvenlik başlıklarını tüm sayfalara eklerken, admin paneli veya AJAX endpointlerinde işlev kaybı yaşanması (bazı başlıklar admin panelinde farklı şekilde uygulanmalı).
- CSP’de kullandığınız CDN, font veya script adresinin eksik yazılması sonucu FontAwesome ikonlarının veya harici scriptlerin çalışmaması.
- HSTS başlığının HTTP trafiklerinde de gönderilmesi (bu, kullanıcıların siteye ulaşamamasına yol açabilir; yalnızca HTTPS’de çalışmalı).
- X-Frame-Options’ın
DENYyerineSAMEORIGINolarak ayarlanması, iframe ile içerik gösterilecekse dikkat edilmesi. - CSP raporlarının dikkate alınmaması ve sıkılaştırma yapılmadan doğrudan uygulamaya geçilmesi.
- Cloudflare gibi CDN arkasında sitelerde, hem sunucu hem CDN tarafından farklı başlıkların çakışması.
- Referrer-Policy’nin çok sıkı ayarlanıp, web analitiklerinin bozulması.
Güvenlik Başlıkları için WordPress Eklentisi Kullanımı
Manuel olarak başlık eklemek istemeyenler için HTTP Headers (WordPress.org) eklentisi önerilir. Bu eklenti sayesinde HSTS, X-Frame-Options, CSP, Referrer-Policy gibi başlıkları panel üzerinden kolayca ekleyebilir, ihtiyaç halinde farklı sayfa türleri veya admin paneli için istisna tanımlayabilirsiniz. Eklenti ile CSP’yi önce Report-Only modda başlatıp, loglara göre ayarları sıkılaştırmanız mümkün olur.
Uygulanabilir Güvenlik Kontrol Listesi
- Tüm başlıkları önce
Report-Onlymodda ekleyin, en az 1 hafta raporları analiz edin. - CSP’de kullandığınız tüm harici kaynakları whitelist’e ekleyin (Google Fonts, FontAwesome, CDN, Analytics, Tag Manager vb.).
- HSTS başlığını yalnızca HTTPS trafiğinde ekleyin ve hstspreload.org adresinde test edin.
- X-Frame-Options ayarınızı iframe ihtiyacınıza göre belirleyin: iframe içeriği gerekiyorsa SAMEORIGIN, gerekmiyorsa DENY kullanın.
- Başlıkların doğru çalışıp çalışmadığını securityheaders.com ile denetleyin.
- Cloudflare veya başka CDN arkasında iseniz, başlık çakışmalarına karşı CDN ve sunucu ayarlarınızı uyumlu hale getirin.
- Google/Yandex doğrulama meta’larının ve Analytics kodlarının çalıştığından emin olun, Search Console uyarılarını gözden geçirin.
WordPress’te CSP uygulaması sonrası bazı görseller veya fontlar neden görünmez?
CSP kurallarında ilgili CDN veya font kaynakları izinli olarak tanımlanmadıysa, tarayıcı harici içerikleri engeller ve bu yüzden fontlar veya görseller görünmeyebilir.
HSTS başlığı eklenince siteye HTTP üzerinden erişilemiyor, bu normal mi?
Evet, HSTS başlığı sitenizin sadece HTTPS ile açılmasını zorunlu kılar. Bu güvenlik için gereklidir; HTTP üzerinden erişim engellenir.
Google Analytics ve GTM kodlarım CSP ile çalışmazsa ne yapmalıyım?
CSP’de script-src kısmına https://www.googletagmanager.com ve https://www.google-analytics.com adreslerini eklediğinizden emin olun.
X-Frame-Options ayarı sitenin bazı sayfalarında sorun çıkarabilir mi?
Eğer iframe ile başka sitelerde içerik gösterilmek isteniyorsa, X-Frame-Options ayarı SAMEORIGIN veya ALLOW-FROM olarak düzenlenmeli.
Doğrulama meta’ları güvenlik başlıklarıyla engellenir mi?
Hayır, meta doğrulama etiketleri ‘self’ tanımı ile korunur ve güvenlik başlıkları doğru ayarlandığında engellenmez.
İlk yorumu siz yazın.