WordPress Web Sitesinde Teknik Güvenlik Önlemleri

WordPress ekosistemi; kullanım kolaylığı, zengin tema/eklenti dünyası ve geniş topluluğu sayesinde dijital varlıkların hızlıca hayata geçmesini sağlar. Ancak bu hız, yanlış yönetildiğinde saldırı yüzeyini büyütür: zayıf parola politikaları, güncellenmeyen eklentiler, yanlış dosya izinleri, yetkisiz API erişimi, kimlik bilgilerinin sızması, XSS/CSRF/SQLi, tedarik zinciri (supply chain) riskleri, üçüncü parti script’ler, zayıf yedekleme ve izleme… Liste uzar gider.
1) Güvenlik Yönetişimi: Roller, Politikalar ve Değişiklik Disiplini
Amaç: “Kim, neyi, ne zaman değiştirebilir?” sorusunu teknik ve operasyonel olarak netleştirmek.
Adımlar:
-
RACI (Responsible, Accountable, Consulted, Informed) matrisi oluşturun.
-
Üretime çıkan her değişiklik için değişiklik kaydı (changelog) ve onay akışı (CAB) belirleyin.
-
Asgari yetki (PoLP): Editör, içerik yöneticisi, geliştirici, güvenlik gözlemcisi gibi rolleri net tanımlayın;
current_user_can()
ile yetenek tabanlı sınırlandırın.
Vaka: Yönetici hesabını içerik ekibinin kullandığı bir sitede, yanlışlıkla eklenti kurulup dosya izinleri açıldı. Rol ayrımı + CAB sonrası bu tür hatalar sıfıra indi.
2) Güncelleme Stratejisi: Çekirdek, Tema, Eklenti, PHP
Amaç: Bilinen zafiyetlerin penceresini küçültmek.
Adımlar:
-
Sürüm matrisi: WordPress, tema/eklenti, PHP, veritabanı sürümleri için uyumluluk tablosu tutun.
-
Staging → canary → prod akışıyla güncelleyin; geri dönüş (rollback) planı hazır olsun.
-
Güvenlik yamaları için 48 saat içinde uygulama SLO’su koyun.
Kontrol listesi: Son güncelleme tarihi > 6 ay olan eklentileri gözden geçirin; bakımı bırakılanları alternatifleriyle değiştirin.
Vaka: Eski bir form eklentisi RCE açığı barındırıyordu; staging’de fark edilip modern eşleniğiyle değiştirildi.
3) Kimlik ve Erişim: Parola Politikası, 2FA ve SSO
Amaç: Hesap ele geçirme (ATO) ve brute-force’u engellemek.
Adımlar:
-
Parola politikası: Uzunluk ≥ 12, sözlük dışı, döngüsel değiştirme; ihlal edilen parolaları (pwned) reddedin.
-
2FA (TOTP/WebAuthn): Yönetici ve editör rollerinde zorunlu.
-
SSO/OIDC: Kurumsal dizinle entegre edin; yetki devri
map_meta_cap
ile ayrıntılandırın. -
Giriş uçlarında rate limit ve IP tabanlı hız kısıtlaması.
Vaka: Yüksek trafikte denenen parola püskürtme saldırıları 2FA ve hız kısıtlamasıyla etkisiz kaldı.
4) HTTPS ve Güvenlik Başlıkları: Temel Hijyen
Amaç: Aktarımda gizlilik ve temel tarayıcı korumaları.
Adımlar:
-
Zorunlu HTTPS + HSTS (subdomain’ler dahil, preload değerlendirin).
-
Güvenlik başlıkları:
Content-Security-Policy
(CSP),X-Content-Type-Options: nosniff
,X-Frame-Options
/Frame-Options
,Referrer-Policy
,Permissions-Policy
. -
Çerezler için
Secure
,HttpOnly
,SameSite=Lax/Strict
.
Vaka: CSP ile inline script’ler kısıtlandı, üçüncü parti kaynaklar beyaz listeye alınarak XSS yüzeyi daraltıldı.
5) Dosya İzinleri, wp-config ve Dizinsel Sertleştirme
Amaç: Yetkisiz dosya değişikliklerini ve bilgi sızıntısını önlemek.
Adımlar:
-
İzinler: Dosyalar
0644
, dizinler0755
; yazılabilir dizinler asgari seviyede. -
wp-config.php
’yi mümkünse web kökü dışına taşıyın; dosya düzenleyicileri kapatın: -
-
Dizin listeleme kapalı; yedek/örtük dosyalar (
.bak
,.sql
,.zip
) webden erişilemez.
Vaka: Manuel yedek.zip
dosyası web kökünde unutulmuştu; dizin listelemesi kapatılarak sızıntı engellendi.
6) WAF ve Bot Yönetimi
Amaç: Kötü isteklerin uygulamaya ulaşmadan engellenmesi.
Adımlar:-
Uygulama önünde WAF: imza + davranışsal kurallar; rate limiting ve IP reputation.
-
Credential stuffing ve tarama (scan) aktivitesine otomatik tepki;
wp-login.php
vexmlrpc.php
için özel kurallar. -
reCAPTCHA/hCaptcha yalnızca gerektiğinde, kullanılabilirliği bozmadan.
Vaka: WAF devreye alındıktan sonra CPU yükü %30 düştü, 5xx oranı normalize oldu.
7) XML-RPC ve REST API Sertleştirmesi
Amaç: Gereksiz uçların kapatılması veya sınırlandırılması.
Adımlar:-
xmlrpc.php
kullanmıyorsanız kapatın ya da IP/anahtar temelli sınırlandırın. -
REST API: Kimliksiz okuma uçlarını minimumda tutun;
permission_callback
zorunlu; hız kısıtlaması ve IP kalkanı ekleyin. -
Nonces ve capability kontrolleri tüm değiştirici (mutating) uçlarda zorunlu.
Vaka: WordPress REST’te filtrelenmemiş listelemeler, kullanıcı adlarını ifşa ediyordu; anonim uç kapatıldı.
8) Girdi/Çıktı Güvenliği: Sanitize–Validate–Escape–Nonce
Amaç: XSS/CSRF/SQLi risklerini kökten azaltmak.
Adımlar:-
Girdi sanitize:
sanitize_text_field
,sanitize_email
,sanitize_key
. -
İş kuralına göre validate; örn. SKU regex, tarih biçimi.
-
Çıkışta escape:
esc_html
,esc_attr
,esc_url
,wp_kses
. -
CSRF için
wp_nonce_field
vecheck_admin_referer
/wp_verify_nonce
.
Vaka: Form işleyiciden öncecheck_admin_referer
eklenmesi kitlesel CSRF girişimlerini boşa çıkardı.
9) Veritabanı Güvenliği:
$wpdb->prepare()
ve Ayrı DB HesaplarıAmaç: SQL Enjeksiyonu ve veri sızması riskini düşürmek.
Adımlar:-
Tüm parametreli sorgularda
$wpdb->prepare()
kullanın; zincirli string birleştirmeye son. -
Uygulama için salt okuma ve yazma hesaplarını ayırın; güçlü parola + kısıtlı haklar.
-
Yedekler şifreli depolansın, erişim loglansın.
Vaka: Rapor sorguları için oluşturulan ayrı, sınırlı yetkili DB kullanıcısı olası yetki yükseltme etkisini minimize etti.
10) Ortam Sırları ve Anahtar Yönetimi
Amaç: Sır sızıntısının önüne geçmek.
Adımlar:-
Sırları
.env
ya da gizli kasa (Vault/KMS) üzerinden yönetin; repoda tutmayın. -
Salt/Key rotasyonu için periyodik takvim.
-
Geliştirme/staging/prod anahtarlarını fiziksel olarak ayırın.
Vaka: Geliştirici repoya yanlışlıkla API anahtarını itti; gizli tarayıcı uyarısı ve DLP kuralı sayesinde dakikalar içinde iptal/rotasyon yapıldı.
11) Ortam Ayrımı, CI/CD ve Güvenli Dağıtım
Amaç: İnsan hatasını azaltmak, izlenebilir ve geri alınabilir yayın.
Adımlar:-
Dağıtım öncesi lint + SAST + dependency audit; sonra staging smoke test, ardından canary.
-
Başarısızlıkta auto-rollback; dağıtımda read-only mod.
-
DISALLOW_FILE_MODS
ile prod’da panelden kurulum/güncelleme yasak.
Vaka: Hatalı tema değişikliği CI’daki görsel regresyon testinde yakalanıp prod’a ulaşmadan durduruldu.
12) Eklenti Hijyeni ve Tedarik Zinciri Güvenliği
Amaç: En büyük risk alanlarından birini kontrol altına almak.
Adımlar:-
Eklenti seçimi için bir kabul kriteri: bakım sıklığı, aktif kurulum, güvenlik geçmişi, issue yanıtları.
-
Aynı görevi yapan eklentileri tekilleştirin; en az eklenti ilkesi.
-
Üçüncü taraf JS/CSS’ler için Subresource Integrity (SRI) + CSP kaynak kısıtları.
Vaka: Eski bir slider eklentisinin zincir saldırı (supply chain) riski; modern, hafif ve bakımı aktif muadiliyle değiştirildi.
13) Medya Yüklemeleri ve Dosya İçeriği Doğrulama
Amaç: Kötü amaçlı yüklemeleri önlemek ve XSS yüzeyini daraltmak.
Adımlar:-
Yalnızca izin verilen MIME türleri; sunucu tarafında gerçek MIME kontrolü.
-
SVG gerekiyorsa sanitize eden kütüphane/kapsayıcı kullanın.
-
uploads
/wp-content
’de PHP yürütme engeli (web sunucusu kuralı).
Vaka: PHP içeren sahte bir GIF engellendi; MIME denetimi ve yürütme kısıtı olmasa RCE mümkün olabilirdi.
14) Oturum ve Çerez Güvenliği
Amaç: Oturum çalınması ve sabitlenmesini engellemek.
Adımlar:-
Oturum çerezlerinde
Secure
,HttpOnly
,SameSite
. -
Başarılı girişte oturum yenileme; 2FA ardından tekrar token üretimi.
-
Uzun süreli oturumları devre dışı bırakın veya risk tabanlı yapın.
Vaka: Ortak bilgisayarlarda açık kalan oturumlar nedeniyle yetkisiz işlemler oluyordu; inaktif süre sonu + cihaz bazlı oturum listesi eklendi.
15) İçerik Güvenliği Politikası (CSP) ve Inline Script Kontrolü
Amaç: XSS etkisini radikal azaltmak.
Adımlar:-
script-src
’yi daraltın; nonce/hash tabanlı whitelist. -
Üçüncü parti alanları minimumda tutun; reklam/analitik için alt alan ayrımı.
-
Rapor modu (
report-only
) ile aşamalı devreye alın.
Vaka: Inline JS kullanan tema blokları CSP’ye uygun noncelerle güncellendi; üretimde kırılma olmadan geçiş sağlandı.
16) Sunucu Sertleştirmesi: PHP-FPM, Nginx/Apache, Sistem
Amaç: Uygulama güvenliğini altyapı ile desteklemek.
Adımlar:-
PHP-FPM:
open_basedir
/disable_functions
(bağlama uygun),pm
ayarları; yavaş loglar aktif. -
Nginx/Apache: Güvenli varsayılanlar, dizin listeleme kapalı, iskelet bloklar.
-
Sistem: Güncel paketler, minimal imaj; EDR/antimalware ve syslog.
Vaka: Eski OpenSSL sürümü nedeniyle TLS zayıflığı tespit edildi; düzenli paket yaması programına alındı.
17) Yedekleme, İyileştirme ve Felaket Kurtarma (DR)
Amaç: “Ne olursa olsun geri dönebilmek”.
Adımlar:-
3–2–1 kuralı; immutable depolama; şifreli yedekler.
-
Aylık staging restore tatbikatı; RPO/RTO hedefleri net.
-
DNS/TLS/CDN/SMTP/DAM/Arama gibi çevre bileşenlerin DR runbook’ta yer alması.
Vaka: Ransomware kaynaklı şifreli dosya depolama saldırısında, offsite immutable yedekle 30 dakikada geri dönüldü.
18) İzleme, Loglama ve Alarm
Amaç: Olayları kullanıcıdan önce fark etmek.
Adımlar:-
Merkezi log: PHP, web sunucusu, WordPress hata kaydı; JSON format + korelasyon ID.
-
Şüpheli oturum, başarısız giriş, dosya değişikliği, 5xx artışı için alarm eşikleri.
-
Değişikliklerden sonra duman testleri ve CWV/TTFB spot ölçümleri.
Vaka: Dosya bütünlüğü izleyicisi, anormalwp-content
değişikliğini 3 dk içinde bildirdi; zararlı script yayılmadan silindi.
19) Performans ve Güvenlik Sinerjisi
Amaç: Hız önlemlerinin güvenliği zayıflatmamasını sağlamak.
Adımlar:-
CDN ile edge önbellek; ancak admin alanı cache-bypass.
-
HTTP/2/3, Brotli/Gzip aktif; kritik varlıklar
preload
ama SRI + CSP ile güvence. -
Büyük JS paketlerini bölün; INP düşer, XSS yüzeyi de azalır.
Vaka: Üçüncü parti kütüphane her sayfada yükleniyordu; koşullu yükleme ile hem LCP iyileşti hem saldırı yüzeyi daraldı.
20) Erişilebilirlik, Gizlilik ve Hukuki Uyum
Amaç: WCAG ve KVKK/GDPR ile çelişmeden güvenlik kurmak.
Adımlar:-
WCAG 2.1 AA hedefi; güvenlik kapıları (captcha vb.) erişilebilir olsun.
-
CMP ile çerez/onay yönetimi; script koşullandırması.
-
Veri saklama/silme hakları için yönetim panelleri ve otomatize akış.
Vaka: Onay olmadan çalışan analitik script’ler CMP ile koşullandırıldı; hukuki risk azaldı.
21) İki Katmanlı İçeriden Tehdit (Insider) Önlemleri
Amaç: Kötü niyetli/ihmalkâr iç erişimleri sınırlamak.
Adımlar:-
Auditing: Kim ne yaptı? Loglar değiştirilemez depoda.
-
Onaylı eylem: Kritik işlemler için ikinci göz (four-eyes).
-
Zaman kısıtlı erişim: Geçici yönetici rolü, otomatik düşüm.
Vaka: Gece geçici admin verilmiş bir hesap sabah otomatik düşürüldü; kalıcı yüksek yetki bırakılmadı.
22) İçerik Dağıtımı ve Kaynak Bütünlüğü
Amaç: Kaynakların beklenmedik değişimini yakalamak.
Adımlar:-
SRI (Subresource Integrity) etiketleri; üçüncü parti script stil kaynakları hash’li.
-
Asset manifest ve dosya imzası; dağıtım sonrası imza doğrulaması.
Vaka: CDN’de güncellenen bir JS dosyası hash uyumsuzluğu verdi; otomatik rollback tetiklendi.
23) Test ve Denetim: SAST/DAST, Pentest, Bug Bounty
Amaç: Kör noktaları üretime geçmeden yakalamak.
Adımlar:-
SAST (statik analiz) ve bağımlılık taraması CI’da zorunlu.
-
DAST (dinamik test) staging’de; pentest periyodik.
-
Uygun kapsamlı bug bounty programı.
Vaka: DAST ile oturum sabitleme (session fixation) bulundu; giriş sonrası token yenilemesi eklendi.
24) İçerik ve SEO Akışlarında Güvenlik
Amaç: Güvenliği bozmayacak SEO/analitik yapılandırması.
Adımlar:-
Robots/Canonical manipülasyonlarına dikkat; yalnız yetkili kullanıcıların meta düzenleme izni.
-
Structured data çıktıları
esc_html
/wp_json_encode
ile güvenli üretim.
Vaka: Kötü niyetli editör, link enjeksiyonu denedi; rol/kapasite sınırı ve inceleme akışıyla engellendi.
25) Olay Yönetimi, Post-Mortem ve Sürekli İyileştirme
Amaç: Kaçınılmaz olaylarda hızlı ve öğretici tepki.
Adımlar:-
Runbook: İlk 5 dakika—(1) Alarm doğrula, (2) WAF/edge/DB sağlık, (3) Son dağıtım diff, (4) Rollback, (5) İletişim.
-
RCA (kök neden) ve CAPA (düzeltici/önleyici faaliyet); 30 gün içinde kapat.
-
Bilgi tabanı ve eğitim: Vakalar, öğrenimler, kontrol listeleri güncel kalsın.
Vaka: XSS sonrası RCA’da inline script kalıntıları bulundu; CSP + nonceli mimariye geçildi, bloklar güncellendi.
Sonuç: Güvenlik, Süreç + Standart + Otomasyon + Ölçüm = Dayanıklılık
WordPress’te güvenlik; “bir güvenlik eklentisi kurduk” basitliğine indirgenemez. Bu yazıda özetlediğimiz disiplin—yönetişim, güncelleme, kimlik ve erişim, HTTPS/başlıklar, dosya izinleri, WAF/bot yönetimi, API sertleştirmesi, girdi/çıktı hijyeni, veritabanı ve sır yönetimi, CI/CD ve tedarik zinciri güvenliği, medya yüklemeleri, oturum/çerez, CSP, sunucu sertleştirmesi, yedek/DR, izleme/alarm, test ve olay yönetimi—birlikte uygulandığında sisteminiz sadece “güvenli” değil; mükerrer saldırılara dayanıklı, hızlı iyileşen, denetlenebilir ve uyumlu hale gelir.
Önerimiz: Önce temel hijyen (HTTPS, başlıklar, güçlü parola+2FA, güncellemeler, dosya izinleri), ardından altyapısal kalkanlar (WAF, rate limit, CSP), sonra süreçsel olgunluk (CI/CD, SAST/DAST, audit, RCA). Bu adımların her biri küçük görünse de birlikte marjinal riskinizi dramatik biçimde indirir. Unutmayın: Güvenlik bir ürün değil, alışkanlıklar bütünüdür—ve bugün attığınız disiplinli adımlar, yarınki krizleri “olağan operasyon” boyutuna indirger.
-