WordPress sitenizin giriş ve yönetici paneli, kaba kuvvet saldırılarının birincil hedefidir; HTTP kimlik doğrulaması ve ek katmanlarla bu kapıyı çift kilitleyin.
WordPress, dünya genelinde web sitelerinin yaklaşık yüzde kırkını güçlendiren dev bir ekosistemdir. Ancak bu yaygınlık, onu siber saldırılar için de son derece cazip bir hedef hâline getirir. Saldırganların en sık başvurduğu yöntemlerden biri, wp-admin dizinine ve wp-login.php dosyasına yönelik otomatik kaba kuvvet (brute force) saldırılarıdır. Bu saldırılarda botlar, saniyeler içinde binlerce kullanıcı adı-parola kombinasyonu dener. İşte bu nedenle WordPress’in kendi giriş mekanizmasına güvenmek tek başına yeterli değildir; giriş ve yönetici sayfanızı bir de sunucu düzeyinde parola korumasına almak, güvenliği katmanlı bir yapıya taşır.
Neden Çift Katmanlı Koruma Şarttır?
WordPress’in varsayılan giriş sayfası herkese açıktır. Bir kullanıcı siteniz.com/wp-login.php adresini tarayıcısına yazdığında herhangi bir engelle karşılaşmadan giriş formuyla yüz yüze gelir. Bu durum, otomatik saldırı araçlarının formu defalarca denemesine zemin hazırlar. Sunucu düzeyinde HTTP kimlik doğrulaması (HTTP Authentication) eklendiğinde ise saldırgan ya da bot, WordPress giriş formuna ulaşmadan önce tarayıcı tarafından üretilen ikinci bir kullanıcı adı-parola ekranıyla karşılaşır. Bu katman WordPress’ten tamamen bağımsız çalışır; PHP devreye girmez, veritabanı sorgulanmaz ve sunucu kaynakları korunmuş olur.
Çift katmanlı korumanın faydaları yalnızca güvenlikle sınırlı değildir. Sunucu yükü belirgin biçimde azalır çünkü kaba kuvvet denemeleri PHP ve MySQL katmanına ulaşamaz. Aynı zamanda başarılı bir giriş denemesini günlüğe kaydetmek ve analiz etmek de kolaylaşır.
.htaccess ve .htpasswd ile Parola Koruması Kurma
Apache tabanlı sunucularda bu işlem .htaccess ve .htpasswd dosyaları aracılığıyla yapılır. Adımlar sırasıyla şöyledir:
1. .htpasswd dosyasını oluşturun
Bu dosya, şifrelenmiş biçimde kullanıcı adı ve parola çiftlerini barındırır. Web kökünün dışına yerleştirmek güvenlik açısından önemlidir; örneğin /etc/apache2/.htpasswd gibi bir konum tercih edilebilir. Terminalde aşağıdaki komutu çalıştırarak dosyayı oluşturabilirsiniz:
htpasswd -c /etc/apache2/.htpasswd kullanici_adinizKomut çalıştırıldıktan sonra sistem sizden bir parola belirlemenizi ister. Parola, bcrypt veya MD5 algoritmasıyla şifrelenerek dosyaya yazılır. Var olan bir dosyaya yeni kullanıcı eklemek istediğinizde -c parametresini kullanmayın; bu parametre dosyayı sıfırdan oluşturur ve mevcut kayıtları siler.
2. wp-login.php için .htaccess kuralı ekleyin
WordPress kök dizinindeki .htaccess dosyasını açın ve aşağıdaki bloğu ekleyin:
<Files wp-login.php>
AuthType Basic
AuthName "Yetkili Giris"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Files>Bu kural yalnızca wp-login.php dosyasını koruma altına alır. Tarayıcı bu sayfayı talep ettiğinde sunucu otomatik olarak bir kimlik doğrulama penceresi açar.
3. wp-admin dizinini de koruma altına alın
Yalnızca giriş sayfasını korumak yeterli olmayabilir; /wp-admin/ klasörünün tamamı da hedef alınabilir. Bunun için wp-admin dizininin içine ayrı bir .htaccess dosyası oluşturun:
AuthType Basic
AuthName "Yonetici Paneli"
AuthUserFile /etc/apache2/.htpasswd
Require valid-userAncak burada dikkat edilmesi gereken önemli bir nokta vardır: WordPress’in admin-ajax.php dosyası, eklentiler ve tema işlevleri tarafından arka planda sıklıkla kullanılır. Bu dosyayı koruma dışında bırakmak için kuralı genişletin:
<Files admin-ajax.php>
Satisfy Any
Allow from all
Deny from none
</Files>Nginx Sunucularında Parola Koruması
Nginx kullananlar için yapılandırma farklı bir söz dizimiyle yapılır. Önce htpasswd aracıyla aynı biçimde .htpasswd dosyası oluşturulur (bunun için apache2-utils paketi Nginx sunucularında da kullanılabilir). Ardından Nginx site yapılandırma dosyasına aşağıdaki blok eklenir:
location ~ ^/wp-login\.php$ {
auth_basic "Yetkili Giris";
auth_basic_user_file /etc/nginx/.htpasswd;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}wp-admin dizini için ise location /wp-admin/ bloğu benzer biçimde yapılandırılır; admin-ajax.php istisnası ise location = /wp-admin/admin-ajax.php bloğunda auth_basic off; direktifiyle sağlanır. Değişiklikleri uygulamak için Nginx’i yeniden yüklemek gerekir: sudo systemctl reload nginx
IP Kısıtlaması ile Güvenliği Pekiştirme
Parola korumasına ek olarak IP tabanlı erişim kısıtlaması uygulamak güvenlik katmanlarını daha da güçlendirir. Eğer yönetim paneline yalnızca belirli IP adreslerinden erişilmesi gerekiyorsa .htaccess kuralına şu satırlar eklenebilir:
Order Deny,Allow
Deny from all
Allow from 123.456.789.000Burada 123.456.789.000 yerine kendi statik IP adresinizi yazmanız gerekir. Dinamik IP kullananlar için bu yöntem pratikte sorun yaratabilir; bu durumda yalnızca parola korumasıyla yetinmek ya da bir VPN üzerinden sabit IP kullanmak daha makul bir tercih olacaktır.
Eklenti Tabanlı Çözümler: Kod Yazmak İstemeyenler İçin
Sunucu yapılandırma dosyalarına doğrudan müdahale etmekten çekinenler için çeşitli WordPress eklentileri bu işlemi görsel arayüz üzerinden gerçekleştirmeye imkân tanır. Wordfence Security, giriş sayfasına yönelik kaba kuvvet koruması, iki faktörlü kimlik doğrulama ve IP engelleme gibi kapsamlı özellikler sunar. WPS Hide Login eklentisi ise wp-login.php adresini tamamen devre dışı bırakarak giriş sayfasını özel bir URL’ye taşır; bu sayede saldırganlar standart giriş adresini bulamazlar.
All In One WP Security & Firewall eklentisi de benzer işlevler sunmakla birlikte .htaccess tabanlı kuralları görsel panel üzerinden yönetmenize olanak tanır. Ancak bu eklentilerin sunucu düzeyinde korumayı tam anlamıyla ikame etmediğini unutmamak gerekir; en sağlam yapı, sunucu yapılandırması ile eklenti katmanının birlikte kullanılmasıyla elde edilir.
SSL Sertifikası Olmadan Parola Koruması Anlamsızdır
HTTP Basic Authentication, kullanıcı adı ve parolayı base64 ile kodlayarak iletir; bu yöntem şifreleme değil, yalnızca kodlamadır. HTTPS (SSL/TLS) olmaksızın bu bilgiler ağ trafiğini dinleyen biri tarafından kolaylıkla ele geçirilebilir. Dolayısıyla parola koruması kurmadan önce sitenizin geçerli bir SSL sertifikasına sahip olduğundan emin olun. Let’s Encrypt gibi ücretsiz ve güvenilir sertifika otoriteleri bu ihtiyacı rahatlıkla karşılar.
Yönetici URL’sini Gizlemek: Ek Bir Önlem
Parola korumasının yanı sıra wp-admin ve wp-login.php adreslerini gizlemek ya da değiştirmek saldırı yüzeyini daraltır. WPS Hide Login gibi eklentiler giriş URL’sini /giris veya /yonetim gibi özel bir adrese taşır. Bu yöntem tek başına yeterli bir güvenlik tedbiri olmasa da diğer önlemlerle birleştirildiğinde anlamlı bir katkı sağlar; zira birçok otomatik saldırı aracı yalnızca standart WordPress yollarını hedef alır.
Rutin Bakım ve İzleme
Güvenlik, bir kez kurulan ve unutulan bir yapı değildir. Giriş denemelerini düzenli olarak izlemek, başarısız giriş kayıtlarını incelemek ve şüpheli IP adreslerini engellemek süregelen bir süreçtir. Sunucu günlükleri (access.log ve error.log) bu konuda değerli ipuçları sunar. Ayrıca .htpasswd dosyasındaki parolaları belirli aralıklarla güncellemek ve kullanılmayan kullanıcı girişlerini silmek güvenlik hijyeninin temel gerekliliklerindendir.
Sık Sorulan Sorular
S1: .htpasswd dosyasını web kökü içine koyarsam ne olur?
Dosyayı public_html veya www gibi web’den erişilebilir bir dizine koyarsanız, doğrudan URL ile erişilip içeriği okunabilir. Bu durum kullanıcı adlarını ve şifrelenmiş parolaları ifşa eder. Dosyayı her zaman web kökünün dışında, sunucunun yalnızca dahili okuma yetkisi olan bir konumda saklayın.
S2: Parola koruması kurduğumda WordPress güncellemeleri veya eklentiler bozulur mu?
Doğru yapılandırıldığında hayır. Ancak admin-ajax.php dosyasını koruma kapsamı dışında bırakmayı unutursanız AJAX tabanlı işlevler (sepete ekleme, canlı arama, form gönderimleri vb.) çalışmayı durdurabilir. Kurulumun ardından sitenizin kritik işlevlerini mutlaka test edin.
S3: Paylaşımlı hosting kullanıyorum, bu yöntemi uygulayabilir miyim?
Evet, çoğu paylaşımlı hosting sağlayıcısı Apache tabanlı sunucular kullandığından .htaccess yöntemi çalışır. cPanel kullananlar “Dizin Gizliliği” (Directory Privacy) aracıyla aynı sonucu görsel arayüzden elde edebilir. Nginx tabanlı paylaşımlı hostinglerde ise doğrudan yapılandırma erişimi olmayabileceğinden hosting sağlayıcınızla iletişime geçmeniz gerekebilir.
İleri Okuma ve Kaynaklar
- WordPress Codex – Yönetici Dizinini Parola ile Koruma: https://developer.wordpress.org/advanced-administration/security/hardening/
- Apache HTTP Sunucusu Belgeleri – Kimlik Doğrulama ve Yetkilendirme: https://httpd.apache.org/docs/2.4/howto/auth.html
- Nginx Belgeleri – ngx_http_auth_basic_module: https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html








