Rehber · WordPress
WordPress Sitelerde Güvenlik: En Yaygın Açıklar ve Korunma Yöntemleri
WordPress sitelerin çoğu çekirdekteki bir kusur yüzünden değil, güncellenmemiş bir eklenti ya da zayıf bir parola yüzünden ele geçirilir. Bu rehberde yaygın açıkları, sertleştirme ayarlarını ve saldırı sonrası izlenecek yolu anlatıyoruz.

WordPress, dünyadaki web sitelerinin çok büyük bir kısmında kullanıldığı için saldırganların da en çok taradığı platformdur. Bu, WordPress'in doğası gereği güvensiz olduğu anlamına gelmez. Çekirdek yazılım aktif bir güvenlik ekibi tarafından izlenir ve kritik yamalar hızla yayınlanır. Asıl risk, çekirdeğin etrafına eklenen parçalardadır ve bu parçaların bakımı site sahibinin sorumluluğundadır.
WordPress güvenlik açıkları nereden gelir?
Güvenlik araştırmacılarının yayımladığı yıllık raporlarda sürekli tekrar eden bir tablo var: bildirilen WordPress güvenlik açıklarının açık ara çoğunluğu çekirdekte değil, eklentilerde ve temalarda bulunuyor. Çekirdeğe kıyasla çok daha küçük ekiplerce, bazen tek bir geliştiricinin elinde geliştirilen on binlerce eklenti var ve bunların bir kısmı artık hiç güncellenmiyor. Bu nedenle güvenliğin ilk kuralı, sitede ne çalıştığını bilmek ve kullanılmayan her şeyi kaldırmaktır.
En yaygın açık türleri
Güncel olmayan eklenti ve temalar
Bir açık kamuoyuna duyurulduğunda yama da çoğunlukla aynı anda yayınlanır. Saldırganlar bu duyuruları otomatik tarayıcılara ekler ve yamasız siteleri günler, hatta saatler içinde bulur. Devre dışı bırakılmış ama silinmemiş eklentiler de risk taşır; dosyaları sunucuda durduğu sürece bazı açıklar doğrudan dosyaya istek atılarak kullanılabilir.
Nulled ve korsan temalar
Ücretli temaların ve eklentilerin lisanssız dağıtılan kopyaları sıklıkla arka kapı, gizli yönetici oluşturan kod ya da spam bağlantı enjeksiyonu içerir. Güncelleme de alamazlar. Tasarruf gibi görünen bu tercih, sitenin baştan ele geçirilmiş olarak kurulması demektir.
Zayıf parola ve brute force saldırıları
Botlar wp-login.php sayfasına yaygın kullanıcı adları ve sızdırılmış parola listeleriyle sürekli deneme yapar. admin kullanıcı adı, başka sitelerde de kullanılan bir parola ve iki adımlı doğrulamanın olmaması bu saldırıların başarıya ulaşmasının başlıca sebepleridir.
XSS, SQL injection ve CSRF
- XSS (Cross-Site Scripting): Kullanıcı girdisinin filtrelenmeden sayfaya basılmasıyla zararlı JavaScript çalıştırılır. Bir yöneticinin tarayıcısında çalışan XSS, oturumu ele geçirip yeni yönetici hesabı açmaya kadar gidebilir.
- SQL injection: Girdilerin veritabanı sorgusuna güvenli biçimde bağlanmaması sonucu saldırgan veritabanını okuyabilir ya da değiştirebilir. WordPress'te sorguların $wpdb->prepare ile hazırlanmaması tipik sebeptir.
- CSRF (Cross-Site Request Forgery): Oturum açmış bir yöneticiye, farkında olmadan ayar değiştiren bir istek gönderttirilir. Formlarda ve AJAX uç noktalarında nonce doğrulaması yapılmaması bu açığa yol açar.
Dosya yükleme açıkları ve yetki yükseltme
Dosya türünü sıkı denetlemeyen bir form ya da eklenti, saldırganın sunucuya PHP dosyası yükleyip çalıştırmasına izin verebilir; bu genellikle sitenin tamamen ele geçirilmesi demektir. Yetki yükseltme açıklarında ise abone gibi düşük yetkili bir kullanıcı, eksik yetki kontrolü nedeniyle yönetici işlemleri yapabilir hale gelir. Kayıt ve üyelik özelliği açık olan siteler bu açıklara özellikle açıktır.
xmlrpc.php kötüye kullanımı
XML-RPC, eski uzak yayın araçları ve bazı entegrasyonlar için kullanılan bir arayüzdür. Tek bir istekte çok sayıda parola denemeye izin verebilen yöntemleri nedeniyle brute force saldırılarında ve pingback üzerinden DDoS amplifikasyonunda kötüye kullanılır. Kullanmıyorsanız sunucu seviyesinde erişimi kapatın; Jetpack gibi ona ihtiyaç duyan bir bileşen kullanıyorsanız önce bunu kontrol edin.
Yanlış dosya izinleri ve paylaşımlı hosting riski
777 gibi herkese yazma izni veren ayarlar, sunucudaki başka bir sürecin dosyalarınızı değiştirmesine imkân tanır. Paylaşımlı hostingde hesaplar arasında yeterli izolasyon yoksa aynı sunucudaki başka bir sitenin ele geçirilmesi sizin sitenize de sıçrayabilir. Aynı hosting hesabında bakımsız eski sitelerin durması da aynı etkiyi yaratır: en zayıf site, hepsinin kapısıdır.
WordPress sitenizi sertleştirme
Güncelleme politikası
Çekirdeğin küçük güvenlik sürümleri otomatik güncellenebilir. Eklenti ve temalarda ise net bir düzen belirleyin: güvenlik yamaları hemen, diğer güncellemeler düzenli aralıklarla. Özellikle e-ticaret ve kurumsal sitelerde güncellemeleri önce canlı sitenin kopyası olan bir test ortamında deneyin, sonra canlıya alın. Bir yıldan uzun süredir güncellenmemiş ya da WordPress.org dizininden kaldırılmış eklentilerin yerine alternatif arayın.
Hesaplar, roller ve giriş güvenliği
- Tüm yönetici ve editör hesaplarında iki adımlı doğrulamayı (2FA) zorunlu kılın.
- admin kullanıcı adını kullanmayın; varsa yeni bir yönetici oluşturup içeriği ona aktardıktan sonra silin.
- En az yetki ilkesi: İçerik yazan kişiye yönetici değil yazar ya da editör rolü verin. Ajans veya geliştirici erişimlerini iş bitince kaldırın.
- Giriş denemelerini sınırlandırın; belirli sayıda hatalı denemeden sonra IP'yi geçici olarak engelleyin.
- Parola yöneticisiyle üretilmiş, siteye özel uzun parolalar kullanın.
wp-config.php ve dosya izinleri
wp-config.php veritabanı bilgilerini ve güvenlik anahtarlarını içerir, bu yüzden en özenle korunması gereken dosyadır. Yönetim panelinden tema ve eklenti dosyalarının düzenlenmesini kapatmak için define( 'DISALLOW_FILE_EDIT', true ); satırını ekleyin; böylece panele giren bir saldırgan tek tıkla PHP kodu değiştiremez. Güncellemeleri yalnız dağıtım süreciyle yapıyorsanız DISALLOW_FILE_MODS ile eklenti kurulumunu da tamamen kapatabilirsiniz. Veritabanı kullanıcısına yalnız o veritabanı üzerinde yetki verin ve tablo önekini kurulumda varsayılandan farklı seçin.
| Öğe | İzin | Açıklama |
|---|---|---|
| Klasörler | 755 | Sahibi yazabilir, diğerleri yalnız okuyup listeleyebilir |
| Dosyalar | 644 | Sahibi yazabilir, diğerleri yalnız okuyabilir |
| wp-config.php | 600 ya da 640 | Yalnız sahibi (veya web sunucusu grubu) okuyabilir |
| 777 | Kullanmayın | Herkese yazma izni verir; hiçbir durumda gerekli değildir |
Sunucu ve ağ katmanı
- Güvenlik güncellemesi almaya devam eden, desteklenen bir PHP sürümü kullanın.
- Bilinen saldırı kalıplarını siteye ulaşmadan engelleyen bir WAF (Web Application Firewall) kullanın; bulut tabanlı WAF'lar aynı zamanda kötü bot trafiğini de azaltır.
- wp-content/uploads klasöründe PHP çalıştırılmasını sunucu kuralıyla engelleyin.
- Tüm siteyi HTTPS üzerinden sunun ve yönetim paneline yalnız şifreli bağlantıyla erişin.
- FTP yerine SFTP kullanın, hosting ve alan adı hesaplarında da 2FA'yı açın.
Yedekleme: son savunma hattı
Her önlem aşılabilir; iyi bir yedek ise en kötü senaryoyu bile birkaç saatlik bir kesintiye indirir. Yaygın kabul gören 3-2-1 kuralı: verinin en az üç kopyası, iki farklı ortamda, bunlardan biri site dışında. Yalnız aynı sunucuda tutulan yedek, sunucu ele geçirildiğinde ya da hosting sorunu yaşandığında yedekle birlikte kaybolur.
- Hem dosyaları hem veritabanını yedekleyin; e-ticaret sitelerinde veritabanı yedeğini sipariş yoğunluğuna göre daha sık alın.
- Yedekleri site dışında, erişim bilgileri siteden bağımsız bir depolamada tutun.
- Birkaç haftalık geçmiş saklayın; bazı bulaşmalar fark edilmeden önce haftalarca sessiz kalır.
- Geri yüklemeyi test edin. Hiç denenmemiş bir yedek, çalışan bir yedek değildir. Belirli aralıklarla yedeği test ortamına geri yükleyip sitenin açıldığını doğrulayın.
İzleme: sorunu erken fark etmek
Dosya bütünlük kontrolü, çekirdek ve eklenti dosyalarını resmî sürümlerle karşılaştırarak değiştirilmiş ya da eklenmiş dosyaları bulur. Buna ek olarak yönetici girişlerini, yeni kullanıcı oluşturma ve eklenti yükleme gibi olayları bir etkinlik günlüğüne kaydedin. Sunucu erişim loglarında wp-login.php ve xmlrpc.php'ye gelen yoğun istekler ya da uploads altındaki PHP dosyalarına yapılan çağrılar önemli işaretlerdir. Birden fazla sunucu ve uygulamanın logunu merkezi olarak topluyorsanız, merkezi log yönetimi araçları bu olayları tek yerden izlemeyi kolaylaştırır. Uptime ve Search Console e-posta bildirimlerini de mutlaka açık tutun.
Siteniz hacklendi mi? Belirtiler
- Ziyaretçiler, özellikle mobilden ya da Google'dan gelenler, alakasız sitelere yönlendiriliyor; siz doğrudan girdiğinizde ise her şey normal görünüyor.
- Search Console'da Güvenlik sorunları raporunda uyarı var ya da tarayıcı siteyi tehlikeli olarak işaretliyor.
- Kullanıcılar listesinde tanımadığınız bir yönetici hesabı bulunuyor.
- Google'da site:alanadiniz.com araması, sizin oluşturmadığınız Japonca karakterli, eczane, kumar ya da replika ürün sayfaları gösteriyor.
- Hosting firması yüksek kaynak kullanımı ya da spam e-posta gönderimi nedeniyle uyarı gönderdi.
- Tanımadığınız eklentiler, uploads klasöründe PHP dosyaları ya da çekirdek klasörlerinde garip isimli dosyalar var.
- Site belirgin bir sebep yokken yavaşladı ya da sayfalarda gizli bağlantılar belirdi. Performans tarafındaki diğer olası sebepler için WordPress site hızlandırma rehberimize bakabilirsiniz.
Malware temizleme adımları
- İzole edin: Siteyi bakım moduna alın ya da erişimi IP ile kısıtlayın; aynı hosting hesabındaki diğer siteleri de kontrol listesine ekleyin.
- Mevcut durumun yedeğini alın: Bulaşmış hali de dahil dosya ve veritabanının kopyasını ayrı tutun; kaynağı araştırmak ve yanlışlıkla silinen veriyi kurtarmak için gerekir.
- Kaynağı bulun: Erişim loglarını, değiştirilme tarihlerini ve güvenlik açığı bildirilen eklentileri inceleyin. Giriş noktası kapatılmazsa temizlik kalıcı olmaz.
- Çekirdeği temiz kopyadan yenileyin: wp-admin ve wp-includes klasörlerini WordPress.org'dan indirilen aynı sürümle tamamen değiştirin; wp-config.php ve .htaccess dosyalarını satır satır kontrol edin.
- Eklenti ve temaları resmî kaynaktan yeniden kurun: Mevcut klasörleri silip resmî dizinden ya da geliştiricinin sitesinden indirilen güncel sürümleri kurun; nulled ya da terk edilmiş olanları hiç geri getirmeyin. uploads klasöründe PHP dosyası kalmadığından emin olun.
- Veritabanını tarayın: wp_options, wp_posts ve wp_users tablolarında enjekte edilmiş script, bilinmeyen yönetici hesabı ve şüpheli yönlendirme kayıtlarını arayın.
- Tüm parolaları ve salt'ları değiştirin: WordPress kullanıcıları, veritabanı, hosting paneli, SFTP ve e-posta parolalarını yenileyin; wp-config.php içindeki güvenlik anahtarlarını ve salt değerlerini yeniden üreterek tüm açık oturumları sonlandırın.
- Search Console'dan inceleme isteyin: Güvenlik sorunları raporunda yaptığınız temizliği açıklayarak inceleme talep edin; ardından sertleştirme ve izleme adımlarını uygulayın.
KVKK açısından veri ihlali bildirimi
Saldırı yalnız sitenin görünümünü değil, kişisel verileri de etkilemiş olabilir: üye bilgileri, iletişim formu kayıtları ya da e-ticaret sitelerinde müşteri ve sipariş bilgileri. 6698 sayılı KVKK kapsamında veri sorumlusu, işlenen kişisel verilerin kanuni olmayan yollarla başkaları tarafından elde edilmesi durumunda bunu ilgili kişiye ve Kişisel Verileri Koruma Kurulu'na en kısa sürede bildirmekle yükümlüdür. Kurul kararıyla bu süre, ihlalin öğrenilmesinden itibaren en geç 72 saat olarak yorumlanmaktadır. İhlal bildirim formu ve güncel düzenlemeler için KVKK'nın resmî sitesini takip edin.
Güvenlik kontrol listesi
- Kullanılmayan eklenti, tema ve eski siteler kaldırıldı.
- Çekirdek, eklenti ve temalar güncel; güncellemeler önce test ortamında deneniyor.
- Yönetici hesaplarında 2FA açık, admin kullanıcı adı yok, roller asgari düzeyde.
- DISALLOW_FILE_EDIT etkin, dosya izinleri doğru, uploads altında PHP çalışmıyor.
- WAF ve giriş denemesi sınırı devrede; kullanılmıyorsa xmlrpc.php kapalı.
- Site dışı, geçmişli yedek var ve geri yükleme test edildi.
- Dosya bütünlük kontrolü, etkinlik günlüğü ve Search Console bildirimleri aktif.
Güvenlik tek seferlik bir kurulum değil, süren bir bakım işidir. WordPress sitelerinin geliştirme ve bakımını WordPress hizmetimiz kapsamında, ödeme ve müşteri verisi barındıran mağazaların altyapısını e-ticaret hizmetimiz kapsamında ele alıyoruz. Sunucu, yedekleme ve log politikalarınızı bütün olarak gözden geçirmek isterseniz IT danışmanlığı sayfamızdan da bilgi alabilirsiniz.
