WordPress Güvenliği: Hacklenen Site Nasıl Tespit Edilir ve Temizlenir?

person in black and white t-shirt using computer

WordPress sitenizde tanımadığınız bir yönetici hesabı, ziyaretçileri başka sitelere yönlendiren sayfalar veya Google’da “Bu site saldırıya uğramış olabilir” uyarısı görüyorsanız sitenize zararlı kod bulaşmış olabilir. Bu rehberde önce hack’in işaretlerini, ardından zararlı dosyaları dosya yöneticisi veya FTP üzerinden nasıl bulup temizleyeceğinizi, son olarak da tekrar yaşanmaması için alınacak WordPress güvenliği önlemlerini anlatıyoruz.

WordPress Sitenizin Hacklendiğini Gösteren İşaretler

WordPress’in resmî “Sitem hacklendi” rehberi bu belirtileri ihlal göstergesi olarak sayar. Sahada en sık karşılaşılanlar şunlardır:

  • Google’da sitenizin altında “Bu site saldırıya uğramış olabilir” uyarısı veya tarayıcıda kırmızı uyarı ekranı
  • Sitenin yalnızca Google’dan veya mobilden gelen ziyaretçileri başka bir siteye yönlendirmesi (siz doğrudan girdiğinizde her şey normal görünebilir)
  • site:alanadiniz.com aramasında sizin yazmadığınız, genellikle yabancı dilde ilaç, bahis veya replika ürün sayfaları
  • Kullanıcılar listesinde tanımadığınız yönetici hesapları
  • Sunucudan toplu spam e-posta gönderildiğine dair uyarılar
  • Hosting firmasından “hesabınızda zararlı dosya tespit edildi” bildirimi
  • Kendi kurmadığınız eklentiler veya ana dizinde rastgele adlı PHP dosyaları

Bu işaretlerden biri varsa paniğe kapılmadan aşağıdaki sırayla ilerleyin.

Temizliğe Başlamadan Önce Yapılması Gerekenler

  1. Gözlemlerinizi not edin. Ne gördüğünüzü, ne zaman fark ettiğinizi ve son günlerde kurduğunuz eklenti veya yaptığınız değişiklikleri yazın. Hack tarihini daraltmak, zararlı dosyaları bulmayı çok kolaylaştırır.
  2. Mevcut hâlin yedeğini alın. Enfekte olsa bile dosyaların ve veritabanının bir kopyasını ayrı tutun. Temizlik sırasında yanlışlıkla gerekli bir dosyayı silerseniz geri dönebilirsiniz.
  3. Erişim şifrelerini değiştirin. Hosting kontrol paneli, FTP, veritabanı ve tüm WordPress yönetici hesapları. Temizlik bittikten sonra bunları bir kez daha değiştireceksiniz.
  4. Kendi bilgisayarınızı tarayın. WordPress’in resmî rehberi, saldırının çoğu zaman FTP veya panel şifresini çalan bir virüsle site sahibinin bilgisayarından başladığına dikkat çeker. Bilgisayarınız temizlenmeden yapılan şifre değişikliği işe yaramayabilir.
  5. Hosting firmanıza haber verin. Özellikle paylaşımlı hostingde sorunun yalnızca sizin sitenizle sınırlı olup olmadığını öğrenmek ve varsa sunucu taraflı tarama sonuçlarını almak için.

Zararlı Dosyaları Eklentiyle Taramak

Panelinize hâlâ girebiliyorsanız ilk tarama için bir güvenlik eklentisi hızlı bir başlangıç sunar. WordPress’in resmî rehberinde de önerilen başlıca seçenekler şunlardır:

EklentiÜcretsiz sürümde öne çıkanlarDikkat edilmesi gereken
Wordfence SecurityCore, tema ve eklenti dosyalarında zararlı kod taraması; uygulama güvenlik duvarı; iki adımlı doğrulamaÜcretsiz sürüme yeni güvenlik duvarı kuralları ve zararlı kod imzaları 30 gün gecikmeli gelir
Sucuri SecurityDosya bütünlüğü kontrolü, işlem kayıtları (audit log), güvenlik sıkılaştırma ayarlarıTarama ağırlıklı olarak uzaktan yapılır; güvenlik duvarı ücretli hizmettir
GOTMLS (Anti-Malware Security)Bilinen zararlı kod kalıplarını tarayıp işaretlemeGüncel tanımlar için ücretsiz kayıt gerekebilir
Quttera Web Malware ScannerDosyalarda zararlı kod ve kara liste kontrolüSonuçları elle değerlendirmek gerekir
MalCareTaramayı kendi sunucularında yaptığı için hosting kaynağını az kullanırOtomatik temizlik ücretli sürümdedir

Panelinize giremiyorsanız Sucuri SiteCheck ve VirusTotal gibi uzaktan tarayıcılar sitenin dışarıdan görünen kısmını kontrol edebilir.

Eklenti taramasının iki sınırı vardır. Birincisi, yalnızca bilinen kalıpları yakalar; yeni veya özel yazılmış bir arka kapıyı (backdoor) kaçırabilir. İkincisi, saldırgan WordPress’in kendisini ele geçirdiyse eklentinin raporuna güvenmek zordur. Bu yüzden eklenti sonucu ne olursa olsun aşağıdaki elle kontrol adımları önemlidir.

Dosya Yöneticisi veya FTP ile Zararlı Dosya Nasıl Bulunur?

Hosting kontrol panelinizdeki dosya yöneticisi veya FileZilla gibi bir FTP programı, WordPress’e hiç girmeden tüm dosyalara erişmenizi sağlar. Dosya yöneticisi kullanımını DirectAdmin dosya yönetimi rehberimizde, FTP bağlantısını ise FileZilla rehberimizde anlattık.

Son Değiştirilme Tarihine Göre Sıralama

En hızlı yöntem budur. Dosya yöneticisinde veya FileZilla’da klasör içeriğini son değiştirilme tarihine göre sıralayın ve hack’i fark ettiğiniz tarihe yakın değişmiş dosyalara bakın. Özellikle şu dosyalar sık hedef alınır:

  • Ana dizindeki index.php, wp-config.php ve .htaccess
  • Aktif temanın functions.php, header.php ve footer.php dosyaları

Bu dosyalardan biri, sizin veya bir güncellemenin dokunmadığı bir tarihte değişmişse içini açıp kontrol edin. Saldırganların dosya tarihini değiştirebildiğini unutmayın; tarih normal görünen bir dosya da enfekte olabilir. Bu yöntem bir başlangıç noktasıdır, tek başına yeterli değildir.

Bulunmaması Gereken Yerlerdeki PHP Dosyaları

Bazı klasörlerde PHP dosyası olmaması gerekir. Buralarda bulunan bir .php dosyası güçlü bir işarettir:

  • wp-content/uploads/ — Bu klasör yalnızca görsel, PDF gibi yüklenen dosyalar içindir. Alt klasörler dahil burada bulunan .php dosyaları büyük olasılıkla zararlıdır.
  • wp-content/mu-plugins/ — “Zorunlu eklentiler” klasörüdür; buradaki dosyalar eklenti listesinde görünmeden otomatik çalışır. Siz veya geliştiriciniz bir şey koymadıysa bu klasörün boş olması ya da hiç olmaması beklenir.
  • Ana dizinde rastgele adlı dosyalar — wp- ile başlayıp WordPress dosyasına benzeyen ama gerçekte olmayan adlar (örneğin wp-confg.php, wp-login1.php) veya anlamsız harf dizilerinden oluşan PHP dosyaları.
  • wp-admin/ ve wp-includes/ — Bu klasörlerde WordPress’in orijinal paketinde olmayan dosyalar. Aynı sürümün temiz paketini indirip klasör içeriklerini karşılaştırabilirsiniz.
  • Tanımadığınız eklenti ve tema klasörleri — wp-content/plugins/ ve wp-content/themes/ altında sizin kurmadığınız klasörler.

Kodun İçinde Aranacak Şüpheli İfadeler

Zararlı kodlar genellikle okunmasın diye şifrelenir (obfuscation). Bir PHP dosyasını açtığınızda aşağıdakileri görürseniz dikkatle inceleyin:

  • eval( — Metin olarak verilen kodu çalıştırır. Zararlı kodların en yaygın parçasıdır.
  • base64_decode(, gzinflate(, str_rot13(, gzuncompress( — Gizlenmiş kodu çözer. Özellikle eval( ile iç içe kullanıldıklarında (eval(base64_decode(...))) neredeyse her zaman zararlıdır.
  • assert( ve create_function( — Dışarıdan gelen veriyle birlikte kullanıldığında kod çalıştırmak için kötüye kullanılır.
  • $_POST, $_GET, $_REQUEST veya $_COOKIE verisinin doğrudan yukarıdaki fonksiyonlara verilmesi — Dışarıdan komut alan bir arka kapı işaretidir.
  • <?php etiketinden hemen sonra gelen, yüzlerce karakterlik tek satırlık anlamsız metin
  • Dosyanın en üstünde, asıl koddan önce eklenmiş ve satır sonuna kadar boşluklarla sağa itilmiş kod

Önemli bir uyarı: base64_decode gibi fonksiyonları bazı meşru eklentiler de kullanır. Bir ifadeyi bulmanız dosyanın zararlı olduğunu kanıtlamaz; bağlamına bakmanız gerekir. Emin olamadığınız bir eklenti veya tema dosyasını düzeltmeye çalışmak yerine, o eklentiyi resmî kaynaktan yeniden yüklemek daha güvenlidir.

Siteyi Bilgisayara İndirip Toplu Arama Yapmak

Dosya yöneticisinde yüzlerce dosyayı tek tek açmak pratik değildir. Daha hızlı yöntem şudur:

  1. FileZilla ile sitenin bulunduğu klasörü (genellikle public_html) bilgisayarınıza indirin.
  2. Klasörü Visual Studio Code veya Notepad++ ile açın.
  3. “Dosyalarda Bul” (VS Code’da Ctrl + Shift + F) özelliğiyle yukarıdaki ifadeleri tüm klasörde arayın.
  4. İndirdiğiniz klasörü bilgisayarınızdaki antivirüs programıyla da tarayın; birçok bilinen PHP arka kapısı antivirüs imzalarında bulunur.

Sunucunuzda SSH erişimi varsa (örneğin VDS kullanıyorsanız) aynı aramayı doğrudan sunucuda yapabilirsiniz:

grep -rlE "eval\(base64_decode|eval\(gzinflate|eval\(str_rot13" /site/dizinifind /site/dizini/wp-content/uploads -name "*.php"

WP-CLI kuruluysa wp core verify-checksums komutu WordPress core dosyalarını resmî sürümle karşılaştırır ve değiştirilmiş ya da fazladan eklenmiş dosyaları listeler. wp plugin verify-checksums --all aynı kontrolü WordPress.org’dan yüklenen eklentiler için yapar.

.htaccess ve wp-config.php Kontrolü

.htaccess, WordPress’in resmî rehberine göre en sık değiştirilen dosyalardan biridir. Yalnızca ana dizinde değil alt klasörlerde de bulunabilir. Şunlara dikkat edin:

  • HTTP_REFERER içinde arama motoru adı veya HTTP_USER_AGENT içinde mobil cihaz adı geçen yönlendirme kuralları. Bunlar yalnızca Google’dan veya mobilden gelenleri yönlendiren hack’lerin klasik yöntemidir.
  • auto_prepend_file veya auto_append_file satırları. Bu satırlar her sayfa açılışında başka bir dosyanın çalışmasını sağlar. Aynı satırlar .user.ini veya php.ini dosyasında da olabilir.

Standart bir WordPress kurulumunun ana dizindeki .htaccess dosyası, ek bir eklenti kuralı yoksa yalnızca şunu içerir:

# BEGIN WordPress<IfModule mod_rewrite.c>RewriteEngine OnRewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]RewriteBase /RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /index.php [L]</IfModule># END WordPress

Önbellek veya güvenlik eklentileri bu dosyaya kendi bloklarını ekler. Bu bloklar genellikle eklentinin adını taşıyan # BEGIN / # END satırları arasında durur. Kime ait olduğu belli olmayan kurallar şüphelidir.

wp-config.php dosyasında ise veritabanı bilgileri ve güvenlik anahtarları dışında, özellikle dosyanın en başında veya en sonunda yer alan anlamsız ya da şifrelenmiş kodlara bakın.

A white Volkswagen logo emblem on a dark teal painted metal surface

Veritabanında Kontrol Edilmesi Gerekenler

Dosyaları temizlemek yetmeyebilir; bazı saldırılar zararlı kodu veritabanına yerleştirir. Hosting panelinizdeki phpMyAdmin ile şu tabloları kontrol edin (tablo öneki sizde wp_ dışında bir şey olabilir):

  • wp_users — Tanımadığınız kullanıcılar. Yönetici yetkisi wp_usermeta tablosunda tutulur; yeni ve tanımadığınız yönetici hesaplarını silin.
  • wp_options — siteurl ve home değerlerinin kendi alan adınız olduğundan emin olun.
  • wp_posts — Yazı ve sayfa içeriklerinde <script veya <iframe araması yapın. Sizin eklemediğiniz harici script’ler enfeksiyon işaretidir.

Veritabanında değişiklik yapmadan önce mutlaka yedek alın.

Hacklenen WordPress Sitesi Adım Adım Nasıl Temizlenir?

Şüpheli dosyaları belirledikten sonra temizliği şu sırayla yapın:

  1. Temiz bir yedek varsa önce onu değerlendirin. Hack tarihinden önceki bir yedeğe dönmek çoğu zaman en hızlı çözümdür. Ancak saldırganın girdiği açık (eski bir eklenti, zayıf şifre) yedekte de vardır; geri yükledikten sonra aşağıdaki güncelleme ve şifre adımlarını atlamayın.
  2. WordPress core dosyalarını yenileyin. wp-includes/version.php dosyasından kullandığınız sürümü öğrenin ve aynı sürümü WordPress.org’dan indirin. Sunucudaki wp-admin ve wp-includes klasörlerini tamamen silip temiz olanları FTP ile yükleyin. WordPress’in resmî rehberi bu işlemin yönetim panelindeki “yeniden yükle” seçeneğiyle değil FTP ile yapılmasını önerir; çünkü panel yalnızca var olan dosyaların üzerine yazar, saldırganın eklediği yeni dosyaları silmez.
  3. Eklenti ve temaları resmî kaynaktan yeniden yükleyin. Kullandığınız her eklentinin klasörünü silip WordPress.org’dan veya geliştiricisinin sitesinden indirdiğiniz temiz sürümü yükleyin. Kullanmadığınız eklenti ve temaları tamamen kaldırın. Lisanssız (“nulled”) tema ve eklentiler en yaygın bulaşma kaynaklarından biridir; bunları kesinlikle silin.
  4. uploads klasöründeki PHP dosyalarını silin.
  5. .htaccess ve wp-config.php dosyalarını elle temizleyin. Şüpheli satırları kaldırın veya .htaccess dosyasını yukarıdaki standart içerikle değiştirin.
  6. Erişimleri tamamen yenileyin. Tüm kullanıcı şifrelerini, veritabanı şifresini (yeni şifreyi wp-config.php dosyasına da yazın), FTP ve panel şifrelerini değiştirin. wp-config.php içindeki güvenlik anahtarlarını WordPress anahtar üreticisinden aldığınız yeni değerlerle değiştirin; bu işlem açık kalmış tüm oturumları sonlandırır.
  7. Siteyi tekrar tarayın. Eklenti ve uzaktan tarayıcılarla kontrol edin.
  8. Google uyarısını kaldırın. Siteniz Google tarafından işaretlendiyse Google Search Console’daki “Güvenlik sorunları” bölümünden inceleme isteği gönderin. İnceleme birkaç gün sürebilir.

Bu adımlardan sonra sorun tekrar ediyorsa, büyük olasılıkla gözden kaçan bir arka kapı vardır. Bu durumda destek ekibimizden profesyonel destek almak daha az zaman kaybettirir.

Tekrar Hacklenmemek İçin WordPress Güvenliği Önlemleri

Temizlik sorunu çözer; asıl WordPress güvenliği, saldırganın tekrar girmesini önlemektir. Aşağıdaki önlemler WordPress’in resmî güvenlik sıkılaştırma rehberine dayanır:

  • Güncel kalın. WordPress, tema ve eklentileri düzenli güncelleyin. Saldırıların büyük kısmı, güncellemesi yapılmamış eklentilerdeki bilinen açıkları hedefler.
  • Gereksiz eklentileri kaldırın. Devre dışı bırakılmış bir eklentinin dosyaları sunucuda durduğu sürece risk taşır.
  • Güçlü şifre ve iki adımlı doğrulama kullanın. Wordfence’in ücretsiz sürümü gibi eklentiler yönetici girişine iki adımlı doğrulama ekler.
  • Giriş denemelerini sınırlayın. Limit Login Attempts Reloaded veya All-In-One Security (AIOS) gibi eklentiler kaba kuvvet (brute force) denemelerini engeller.
  • Panelden dosya düzenlemeyi kapatın. wp-config.php dosyasına şu satırı ekleyin:define( 'DISALLOW_FILE_EDIT', true );Bu, yönetici hesabı ele geçirilse bile tema ve eklenti dosyalarının panelden düzenlenmesini engeller.
  • Dosya izinlerini doğru ayarlayın. Klasörler için 755, dosyalar için 644; wp-config.php için sunucu yapılandırmanıza göre 440 veya 400.
  • uploads klasöründe PHP çalışmasını engelleyin. wp-content/uploads/ klasörüne şu içerikle bir .htaccess dosyası ekleyin:<FilesMatch "\.php$">Require all denied</FilesMatch>
  • Yapılan işlemleri kaydedin. WP Activity Log gibi bir eklenti, kimin ne zaman hangi değişikliği yaptığını gösterir; bir sonraki olayda hack tarihini bulmak dakikalar sürer.
  • Sunucu tarafı korumayı eklentiyle birleştirin. Eklentiler WordPress’in içinde çalışır; saldırı WordPress’e ulaşmadan önce durdurulursa daha az kaynak harcanır. Bu konuyu WAF rehberimizde ve Imunify360 yazımızda ayrıntılı anlattık.
  • Yedekleri sitenin dışında da saklayın. Hosting yedeklerine ek olarak periyodik olarak kendi bilgisayarınıza veya ayrı bir depolama alanına kopya alın. Sunucu tarafında snapshot ile yedek arasındaki farkı bilmek de doğru geri dönüş yöntemini seçmenize yardımcı olur.

Hack sonrası WordPress yönetim paneli “kritik hata” verirse WordPress kritik hataları rehberimizdeki adımlar işinize yarar.

Sık Sorulan Sorular

Güvenlik eklentisi kurmak tek başına yeterli mi? Hayır. Eklentiler bilinen saldırıları engeller ve tarama yapar, ancak güncel olmayan bir eklentideki açığı veya çalınmış bir şifreyi telafi edemez. Güncelleme, güçlü şifre, iki adımlı doğrulama ve düzenli yedekle birlikte kullanıldığında anlamlıdır.

Yedekten geri dönmek siteyi tamamen temizler mi? Yedek hack öncesine aitse dosyalar temiz olur, ancak saldırganın kullandığı açık hâlâ yerindedir. Geri yüklemeden hemen sonra WordPress’i, temaları ve eklentileri güncellemeniz ve tüm şifreleri değiştirmeniz gerekir.

Temizlikten sonra Google’daki spam sayfalar ne zaman kaybolur? Zararlı sayfaları kaldırdıktan sonra Google’ın siteyi yeniden taraması gerekir. Search Console üzerinden inceleme isteği göndermek ve kaldırılan URL’lerin 404 veya 410 döndürdüğünden emin olmak süreci hızlandırır.

Sonuç

Hacklenen bir WordPress sitesini temizlemenin özü, zararlı dosyaları sistematik olarak bulmaktır: değiştirilme tarihlerine bakmak, uploads gibi PHP içermemesi gereken klasörleri kontrol etmek, şüpheli kod kalıplarını toplu aramak ve core dosyalarını temiz sürümle değiştirmek. Kalıcı WordPress güvenliği ise güncellemeler, iki adımlı doğrulama ve düzenli yedekle sağlanır.

YediNet WordPress Hosting paketlerinde gecelik yedekleme, DirectAdmin dosya yöneticisi, LiteSpeed web sunucusu ve ücretsiz Let’s Encrypt SSL bulunur. Bir sorun yaşadığınızda hack öncesi bir yedeğe dönebilir, dosyalarınızı panelden doğrudan inceleyebilirsiniz.