WordPress İçin Güvenliğin Püf Noktaları

Merhaba değerli kadirdurukan.com okurları… Güvenlik biz blog kullanıcıları için olmazsa olmaz bir gereksinimdir. En azından karizma çizdirmeyiz. Her neyse bu yazımız da WordPress için en temel yani en gerekli güvenlik önlemlerinden bahsedeceğim. Bundan önce ayrıtılı ve php dosyaları üzerindeki kod açıklarından ve sair bahsetmiştim. Aşağıdaki anlattığım yötemleri mutlaka incelemenizi öneririm.

Herşeyden önce WordPress sisteminizi sunucunuza kurduktan sonra wp-admin dizini içindeki wp-install.php dosyasını mutlaka ama mutlaka silmelisiniz. Ardından FTP’nizden aşağıda belirttiğim dosyalara izinleri tanımlamalısınız. Bu izinler sunucularınızdaki dosyalar üzerinde okuma, yazma ve silme yetkisidir. Bu yetkiler Sahip izinleri, Grup izinleri ve Genel izinlerdir. Özellikle Genel izinlerinizin bulunduğu dosyaları yinede kontrol edin. Ne olur ne olmaz.

Evet, aşağıdaki izinleri FTP’nizden tanımlamanız iyi olur. Zaten genelde bu izinler çoğunlukla defaulttur. Ama bazen eklenti kurulumlarında ve sair değişebiliyor. Kontrol etmekte fayda var.

[php]Ana dizin (root directory) : 0755
wp-includes/ : 0755
wp-admin/ : 0755
wp-admin/js/ : 0755
wp-content/ : 0755
wp-content/themes/ : 0755
wp-content/plugins/ : 0755
wp-admin/index.php : 0644
.htaccess : 0644
wp-config.php : 0644[/php]

Bu izinleri verdikten sonra sıkıntı yaşamamanız adına yükleme yapılan, dosya vs yüklemesi olan, temanızda özel bir fonksiyonla depolama yapılan (yedek alımları gibi) dosyalar olabilir. Bu dosyalara 0777 izni verebilirsiniz. Ancak(!) belirli periyotlarla bu klasörlere muhakkak bakın. FTP’den açıp inceleyin. Hatta içinde php dosyaları (HTML dahi olsa) indirip base64 tarzı kodlar varmı bakın. Ayrıca resim dosyalarının listesi ve bu klasörün içinin görünmesini istemiyorsanız içine boş bir index.php yada index.html dosyası atmak iyi olur. Devam edelim…

Plugin Dizini İçinse bu dosya dizininizin görünmesini istemiyorsanız içine yine index.php yada index.html dosyası atabilirsiniz.

.htaccess Dosyasını mutlaka hostunuzda bulundurun. Aşağıda verdiğim kodları da .htaccess dosyasına kaydedin ki güvenli olsun. (yüzde yüz olmasada)

[php] # .htaccess dosyasına erişimi engelle
<files .htaccess>
order allow,deny
deny from all
</files>

# sunucu imzasını kaldır
ServerSignature Off

# dosya yükleme boyutunu 10mb ile sınırlandır
LimitRequestBody 10240000

# wpconfig.php dosyasına erişimi engelle
<files wp-config.php>
order allow,deny
deny from all
</files>

# wp-load.php dosyasına erişimi engelle
<files wp-load.php>
order allow,deny
deny from all
</files>

# dizin listelemeyi iptal et
Options All –Indexes
<pre>[/php]

wp-config.php Dosya Güvenliği

Şifreleme ile;
Bu dosyamız DataBase (DB) yani veritabanı bilgilerimizin bulunduğu kısım. Bu nedenle bu dosyanın çok gizli olması gerekmektedir. ahsi halde sistemimize sızılması olasıdır. Mesela korumak için wp-config.php doyasını şifrelemek çok akıllıca olur. ionCube, Zend Guard veya en basiti ve ücretsiz phpr.org ile şifreleyebilirsiniz.

 

Doya konumu değiştirme ile;
wp-config.php bizim için çok hassas olduğu için sadece şifreleme ile kalmak pek doğru olayabilir. Bu nedenle dizinini yada ismini değiştirebiliriz. Bunun içinde ana dizindeki wp-load.php dosyasını açıp wp-config.php yazan yerleri wp-content/wp-config.php şeklinde değiştirebiliriz. Yada ismini değiştirebiliriz. Örnek olarak aşağıdaki kodları inceleyebilirisiniz;

[php]if ( file_exists( ABSPATH . ‘wp-content/wp-config.php’) ) {

/** The config file resides in ABSPATH */
require_once( ABSPATH . ‘wp-content/wp-config.php’ );

} elseif ( file_exists( dirname(ABSPATH) . ‘/wp-content/wp-config.php’ ) &amp;&amp; ! file_exists( dirname(ABSPATH) . ‘/wp-settings.php’ ) ) {

/** The config file resides one level above ABSPATH but is not part of another install*/
require_once( dirname(ABSPATH) . ‘/wp-content/wp-config.php’ );[/php]

Dosya erişimini engellemek;
.htaccess dosyasına yazacağımız komutlarla bu dosyaya girişleri engelleyebiliriz. Ayrıca bu arada da wp-load.php dosyasına erişimi de engelleyecek komutlar yazmakta fayda var. Bu işlemler için gerekli komutlar aşağıdadır.

[php]</pre>
# wpconfig.php dosyasına erişimi engelle
<files wp-config.php>
order allow,deny
deny from all
</files>

# wp-load.php dosyasına erişimi engelle
<files wp-load.php>
order allow,deny
deny from all
</files>
<pre>
[/php]

Diğer Önlemler

Gereksiz bilgilerin görünmesini engellemek için functions.php dosyasına aşağıdaki kodu ekleyebilirsiniz.

[php]add_filter(‘login_errors’,create_function(‘$a’, "return null;"));[/php]

WordPress sürüm numarasını gizlemekte bir önlem olabilir. Zira o sürümde bir açık varsa hedef haline gelebilirsiniz. Sürümü gizlemek için functions.php dosyanıza aşağıdaki kodu ekleyebilirsiniz.

[php]remove_action(‘wp_head’, ‘wp_generator’);[/php]

Varsayılan (Default) kullanıcı adınız genelde Admin olur. Bu da gizlenmesi gereken bir bilgi haline gelebilir. Eğer kullanıcı adınızı admin yaptı iseniz veritabanınıza girip aşağıdaki SQL kodunu çalıştırabilirsiniz. Yeniisim yazan yere istediğiniz ismi yazabilirsiniz.

[php]UPDATE wp_users SET user_login = ‘Yeniisim’ WHERE user_login = ‘Admin’;[/php]

3 Replies to “WordPress İçin Güvenliğin Püf Noktaları”

  1. Ellerine sağlık güzel bir döküman olmuş. Umarım okuyup faydalananın da bol olur…
    Makalende belirttiğin detaylar muhakkak ki önem teşkil ediyor ancak bence wp için en büyük tehlike kullanılan eklentiler…
    Nedenine gelince hepimizin bildiği gibi wp php tabanlı hazır bir sistem. wp kullanıcılarının yarısından çoğu hatta büyük kısmı kendi kodunu yazamadığı için wp kullanıyor. kodlama bilgisi olmadığı için wp eklentilerini de kendisi kodlayamıyor. Sağdan soldan eklenti temin ederek kullanıyor. Acaba bu eklentilerin kaçı temiz ve dürüst bir şekilde yazılmış oluyor. Burasıda ayrı bir muallak…

      1. Uzman olarak görüşlerinizi belirttiğiniz için teşekkür ederim. :)
        Ayrıca WordPress’in kendi sitesinden alınan eklentiler genelde güvenlik eleklerinden geçtiği için sıkıntı genel olarak olmuyor. Ama genelde ücretsiz temalar alırken mutlaka dikkat etmekte fayda var.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir