wordpress htaccess ile güvenlik önlemleri

Oğuzhan Mallı

Yetkili Kişi
Genel Yönetici
Kayıt
6 Şubat 2015
Mesajlar
534
Tepkiler
421
Meslek
Nükleer ve Atom Mühendisi
Üniv
MEPhI, KTÜ
WordPress 70 milyon kullanıcıya sahip dünyanın en popüler CMS'dir. Ama wordpress ne kadar güvenlidir? Wordpress de güvenlik nasıl sağlanır? Wordpress güvenlik önlemleri nedir?

Bu yazıda wordpress altyapısına sahip web siteleri için bazı önlem alma tekniklerini göstereceğim. Bir başka yazıda htaccess ile site hızlandırma hakkında bilgi vermiştik.

1- Olarak .htaccess dosyasını oluşturalım (ana dizinimiz de yok ise)

İlk olarak aşağıdaki kod ile başlıyoruz. Kalıcı bağlantı ayarlarını yapmaktadır.

Kod:
# BEGIN WordPress

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress

2. wp-config.php dosyasının korunması

.htaccess dosyamızın içerisine aşağıdaki kodu ekliyoruz. Bu ko wp-config.php dosyasına dışarıdan müdahaleyi engelleyecek.

Kod:
<Files wp-config.php>
    order allow,deny
    deny from all
    </Files>

3- Yönetici hesabını sınırlandırma (Opsiyonel)

Kod:
order deny,allow

    allow from 201.091.21.32 (bu kısıma kendi ip adresinizi yazınız)
    deny from all

4- Kötü kullanıcıları engelleme

Eğer aynı ip lerden sürekli yönetici hesabına erişme, şifre denemesi yapma, sunucuyu zorlama, kaynak dosyalara ulaşma vs gibi işlemlerde bulunan var ise ip sini banlayabilirsiniz.

Kod:
 <Limit GET POST>
    order allow,deny
    deny from 201.091.21.32 ( Bu kısıma kötü kişinin ip si)
    allow from all
    </Limit>
Yine birden fazla ise aynı koda ekleme yaparak devam ediyoruz.

Kod:
<Limit GET POST>
order allow,deny
deny from 201.091.21.32
deny from 204.090.21.2
allow from all
</Limit>
5- Dizinlerin listelenmesini kapama

Bazı temalar ve eklentilerde açık olabiliyor veya farketmeden silmiş olabiliyoruz. Eğer dizininizde listelenen klasör var ise bunları kapatınız.

Şöyle ki orada hangi dosyalar mevcut göre biliyorum. Mesela class-wp-theme.php gibi
veya diğerleri google dan class-wp-theme.php diye arattığım zaman mesela dosyanın içeriğini buluyorum. Bu dosyanın içini gösteriyor. Yani php dosyasının içinde neler var görebiliyorum. Orada hangi değişkenleri kullanmış göre biliyorum. Sonra basit bir şekilde yukarıdan en basit yöntem olan post ile istediğimi gönderip kendime kapı aça bilirim.

Aşağıdaki kodu .htaccess dosyamıza ekliyoruz. Bazı sunucularda çalışmayabiliyor. Eğer hala dizinler kapanmaz ise o dizine boş index.php atınız.

Kod:
Options All -Indexes
6- Önemli gördüğünüz dosyalarınızı koruyabilirsiniz (opsiyonel)

Kod:
<files .htaccess="dosyanın adı buraya">
    order allow,deny
    deny from all
    </files>
7- .htaccess dosyasının korunması

Kulağa çılgınca gelebilir :) .htaccess ile sistemimizi korurken bazen açıklar .htaccess'den de kaynaklı olabiliyor. Onuda korumaya almamız gerekiyor.

Kod:
 <Files ~ "^.*\.([Hh][Tt][Aa])">
    order allow,deny
    deny from all
    satisfy all
    </Files>
Aşağıdaki koduda ekleyebilirsiniz.

Kod:
<FilesMatch "(\.htaccess)">
Order deny,allow
Deny from all
</FilesMatch>

8- Hotlink koruması

Sitenizdeki resimleri başka siteler sizin sunucunuz üzerinden kendi sitelerinde kullanabilirler. Buda gereksiz yere sizin bant genişliğinize yansır. Bunu engellemek için aşağıdaki kodu kullababilirsiniz.

Kod:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)muhendisbeyinler.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)google.com/.*$ [NC]
Yine buraya izin verdiğizi siteleri ekleyebilirsiniz. Yukarıda kendi sitemize ve googlea izin verdik. Burayı silmeyi unutmayınız :)
RewriteRule \.(gif|jpg|jpeg|bmp|zip|rar|mp3|flv|swf|xml|mp4|png|css|pdf)$ - [F]
domain'i değiştirmeyi unutmayınız.

9- Wordpess Admin Klasörünü Şifreleme


İlk olara .htpasswds dosyamızı oluşturmamız gerekmektedir. Bu siteden oluşturabilirsiniz: htaccesstools.com/htpasswd-generator sitesine girdikten sonra kullanıcı adı ve şifre oluşturup create .htpasswds tıklayınız. Daha sonra çıkan kodları .htpasswds dosyası oluşturarak içine kopyalayıp bu dosyayı /public_html/ içine atabilirsiniz.

Örnek yaptığım bir şifreleme:

Kod:
admin:$apr1$2ELzmWNL$TZMFaGlFTV.pvBAmhiXbu1
Diğer Bir Yöntem

home/user/.htpasswds/public_html/wp-admin/passwd/

wp admin içerisinde passwd klasörü oluşturup içerisine yeni bir .htaccess dosyası oluşturuyoruz. Ardından içerisine aşağıdaki kodları ekliyoruz.

Kod:
AuthName "Admins Only"
AuthUserFile /home/sizindizininiz/public_html/
AuthGroupFile /dev/null
AuthType basic
require user putyourusernamehere
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>
10- Bazı Wordpress alt klasörlerinde PHP yürütmeyi kapatma

Bazen kötü kişiler /wp-content/uploads/ veya /wp-includes/ klasörlerinden php dosya çalıştırarak kapı açabilirler. Bu klasörlerde php yürütmeyi kapatabiliriz. Nasıl yapacağız? FTP den bu klasörlere ulaşarak yeni bir .htaccess dosyası oluşturuyoruz. Bu dosya içerisine aşağıdaki kodları ekliyoruz.

Kod:
<Files *.php>
deny from all
</Files>
11- wp-include ve içerik dosyalarının korumanın bir başka yolu

Kod:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
12- error.log dosyasının gizlenmesi

sunucumuzun verdiği hataları herkes tarafından görülmesi pek yararımıza olmayabilir.

Kod:
<FilesMatch "(\error.log)">
Order deny,allow
Deny from all
</FilesMatch>
 
Yukarı Alt