WordPress güvenlik sorunları bugünlerde gündeme geldi. WordPress Türkiye sitesinde bir sorun oldu ve bilgiustam.com siteside bir sorun yaşadı. WordPress sitenizi hack girişimlerine karşı korumak için neler yapabiliceği ile ilgi bir yazı yazmak istedim ancak yazılmışı varmış. Yakuter.com daha önce oldukça iyi bir makale hazırlamış bu adreste yazmaya devam ediyor. Yazısını aynı şekilde yayınlıyoruz.
Güvenlik konusunda belki de en önemli meseledir dosyaların güvenliği. Çünkü dosyalar bizzat sitelerin çökertilmelerine sebep olabilecekleri gibi wp-config.php gibi kritik bir dosya nedeniyle veritabanınıza da veda etmek zorunda kalabilirsiniz. Dosya güvenliği konusunda wp-config.php dosyası üzerinde özellikle durmak istiyorum. Bununla birlikte diğer dosyaların güvenliği ve .htaccess dosyasından da bahsedeceğim.
WordPress Güvenlik Tedbirleri yazı dizisideki diğer yazıları aşağıda görebilirsiniz.
Dosya İzinleri
WordPress kurulumunu tamamladıktan sonra ilk yapmanız gereken şey wp-admin klasöründeki install.php dosyasını silmektir. Ardından sıra dosyaların izinlerindedir. Yanlış bir dosya izni nedeniyle sunucuya sızılabileceğini unutmayın. WordPress’in kritik dosya ve kalsörleri ile bunların izinleri için aşağıdaki tabloyu referans olarak alabilirsin ama tabi çok daha sıkı bir sistem için izinleri kendi isteğinize göre ayarlayabilirsiniz.
| 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 |
Bazı eklentiler kurulmak için wp-content gibi klasörlerin yazılabilir olmasını ister. Böyle durumlarda eklentiyi kurmadan önce dosya iznini 0777 yapın ve kurulum tamamlandıktan sonra klasörü tekrar eski dosya iznine döndürün. Aynı durum .htaccess dosyası için de geçerlidir. Mutlaka eski dosya iznine dönüş yapın.
Yükleme klasörünüzün (uploads, yuklemeler vb.) dosya izni 0777‘de kalabilir ama arada bir bu dizini kontrol etmek ve zararlı bir dosya (örneğin .php uzantılı ve sizin yüklemediğiniz bir dosya) var mı, bakmak gerekli.
Plugins Dizini
WordPress sisteminizde açık olmasa da kullandığınız eklentilerde açıklar bulunabilir. Ziyaretçilerinizin bu dizini yani eklentilerinizi görmelerini engellemek istiyorsanız boş bir dosya oluşturup bu dosyayı index.html olarak kaydedin ve wp-content/plugins dizinine FTP ile yükleyin. Artık eklentileriniz tarayıcı vasıtasıyla görünmezler.
Not: Güncel WordPress sürümlerinde zaten boş bir dosya bulunuyor(index.php). Bulunmayanlar bu bahsettiğim boş index.html dosyasını kullanabilirler.
.htaccess Dosyası
Güvenli bir WordPress için sağlam bir .htaccess dosyası çok önemlidir. Bu dosya genelde WordPress’in standart yönlendirme içeriğini barındırır ama geliştirmek ve güvenliğimizi artırmak bizim elimizdedir. Bu nedenle aşağıdaki kodları .htaccess dosyanızın en üstüne yapıştırmanızı öneririm. Her satırın üzerinde ilgili kodun ne işe yaradığını yazdım. Aşağıdaki kodları olduğu gibi kopyalayıp .htaccess dosyasına yapıştırarak kullanabilirsiniz. Eğer henüz bir .htaccess dosyanız yok ise boş bir dosya oluşturun, içine aşağıdaki kodları kopyalayın ve bu dosyayı sunucunuza yükleyin. Hepsi bu kadar.
01 |
# .htaccess dosyasına erişimi engelle |
07 |
# sunucu imzasını kaldır |
10 |
# dosya yükleme boyutunu 10mb ile sınırlandır |
11 |
LimitRequestBody 10240000 |
13 |
# wpconfig.php dosyasına erişimi engelle |
19 |
# wp-load.php dosyasına erişimi engelle |
25 |
# dizin listelemeyi iptal et |
wp-config.php Dosyası
Bu dosya WordPress günlüklerinin en önemli dosyasıdır çünkü içinde veritabanına bağlantı için gerekli bilgiler ile birlikte temel ayarlar bulunur. İşte bu nedenle bu dosyayı mutlaka korumalıyız.
wp-config.php Dosyasını Şifrelemek
Bununla birlikte wp-config.php dosyasının içeriğini şifrelemeyi unutmayın. Şifreleme için ionCube, Zend Guard veya en basiti ve ücretsiz olan phpr.org sitesindeki aracı kullanabilirsiniz. Benim tercihim ionCube‘den yana. Tabi şunu da unutmamak gerekir ki her şifre kırılabilir. Bu nedenle hiçbirine tam olarak referans olamam. Ben sadece böyle bir yolun da olduğunu bilmenizi istiyorum.
ionCube ile Dosya Şifrelemek: Aslında bu gerçekten çok basit bir işlem. Önce ionCube sitesine üye oluyorsunuz. Sonra kredi yüklemek için ödeme yapıp (minimum 5$ = 10 dosya) kredinizin yüklenmesini bekliyorsunuz. Krediniz yüklenince Encode (Şifrele) sayfasına gidiyor ve şifrelemek istediğiniz dosyayı gönderiyorsun. Dosya şifrelenip size geri veriliyor. Verilen dosyayı sitenize koyup direk kullanmaya başlayabiliyorsunuz.
ionCube ile şifrelenmiş bir wp-config.php dosyası yaklaşık olarak şöyle görünür.
02 |
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');@dl($__ln);if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}@dl($__ln);}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the site administrator.');exit(199); |
05 |
4+oV575DvTsGajqIUVykSFuJGG8fQa3HJdW84yY76SRKAYvtpoMNsaj+cvZ0rvmH+Oshi+/HhoFu |
06 |
mUwQCqePxKNCBS5qWo2+/U5v50KOGpurR5jzM2aoY8GZqeQ6W4jDu2MFPQ/vt41caF6wjzJOmtMs |
07 |
GQv29n2lLMSGAvnG1G0vGHltkRu8EApnKgxVuGL2UOax2xVDOmD9kTlH/99tEU57NvXrYIIfFLRP |
08 |
hypRoh02Prk4A0oGo7e32t40TkIi+YRufAQsKOaL4m8tOBGl9iBKeGxc5TvLODf0SM5TcTmsf3Ab |
09 |
4CJCQzzrx6L23jsrUaHZPrBdOVubdBaG7P4txEdfVMA9HaPgRkf0j7lB9i4Zhy879Ta6o54IcOpD |
10 |
axMyhFZ9LmUTWjyvN0n92/1xc1CnAwbYKFLfPROeodEKaJKedNNl2BCu0BbGLgk5b1U3+7QRdO4g |
11 |
fHogbUNw/q5kgvUftcTFTYk5eBi3i0ibbVhJYxx8YyPqjUjh4hFiCSs0LZiPUJMY1qtMfWBfn+Jj |
12 |
qw11r4cpgjwVq5ur3+pMcQ8CxCnOHX8DauxZ/fQP7eDKkbp/FJX7GlyV9z/zn5D+wIyKyfEEHYWi |
13 |
UEDDPIkIo2PGSs1ZhIdnt3hyj0DbwCT9Gf51OkdUQulKGTwRzYFRIP8e3cVfpCXHjvc37l/jXFPN |
14 |
vlCm6n6EQqPuhgYPO1Abpo+Ne5Xp7ihu6RtHI/KvQgpywub2BRpsvypvmzeNX359tzt543q92Mh5 |
15 |
HnyTYIFHXzXMRcLwu1Fu4YYCGnXKnJXS8ITq0MQV+A4zJd7dTgKv44WjI8tqZ4oLjQhTv/lEnkR+ |
16 |
zzPhnLKUHlvRF/Ww01Qbjzzneh+AxSIfHqdBtB3gnxwvo6dj8AN4EIl8Lk6tq8YHqBN9dWnN03/6 |
17 |
wC3rB2bgPP+xXzY/kuoH5W11lsIsjdfXobEj+tTpRANAMiBcxdu7+Ph97KKHTENlZ08gfl+1a4WK |
18 |
vWavse/s8VcY7W8CM05r1JNGHJs83aBgx0wKOvIFBnBncZNdAvjL+adRQWdIstl+X1AAnbaUbF1C |
19 |
gIVkcirAUGfN/YOgx6JjjO6Wk9vbXPN8aQXHe58LKKHolYMTnVimDuhyMYaYdF6VZKqc+ZN4Ccss |
20 |
6QeMgz/7TIavAtumqzAlkZUBMhad0+we1eUmXEuQDGj2G7+/hj5pCKUjIDK1Hp9BkkepP8u0c8ec |
21 |
X+tU1uTmD8Rf3nvSoD7O0UFhWQL8mkUgeAmiafKDIoK+Co1qr7IwN3avlp0M2alGZHgaOUV6wHUT |
22 |
H9j2AOgvHJXoa6jlo47KViPrvARriCUMSzH6dpZ23Fr0Lj+jktWP6UKIGL6MNLyM4K77ce4IbSBH |
23 |
r4zPIMTSzDPgGkpalp02tUIea0nQbcL67cDT6JuRZqxu7FV0yCdPHFquanH5sgI9S3CxsSRbBh8i... |
wp-config.php Dosyasının Konumunu Değiştirmek
wp-config.php dosyası çok önemli olduğu için sadece şifrelemeye güvenemeyiz. Bununla birlikte wp-config.php dosyasının bulunduğu dizini veya dosyanın direk ismini değiştirmeliyiz. Bunu yapmak için de sitemizin ana dizinindeki wp-load.php dosyasını açmalı ve wp-config.php yazan yerleri dilediğimiz şekilde değişirmeliyiz. Örneğin wp-content klasörüne taşımak için wp-load.php dosyasındaki wp-config.php yazan yerleri wp-content/wp-config.php şeklinde değiştirmeliyiz. İlgili satırların değişmiş hali şu şekilde olacaktır.
1 |
if ( file_exists( ABSPATH . 'wp-content/wp-config.php') ) { |
3 |
/** The config file resides in ABSPATH */ |
4 |
require_once( ABSPATH . 'wp-content/wp-config.php' ); |
6 |
} elseif ( file_exists( dirname(ABSPATH) . '/wp-content/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-settings.php' ) ) { |
8 |
/** The config file resides one level above ABSPATH but is not part of another install*/ |
9 |
require_once( dirname(ABSPATH) . '/wp-content/wp-config.php' ); |
wp-config.php Dosyasına Erişimi Engellemek
Bu dosyayı korumak için öncelikle .htaccess dosyasına, tarayıcı üzerinden wp-config.php ve wp-load.php dosyalarına erişimi engelleme kodunu eklemeliyiz. .htaccess dosyasını incelediğimiz başlıkta bu kodu zaten vermiştim ama yine de tekrar yazayım.
01 |
# wpconfig.php dosyasına erişimi engelle |
07 |
# wp-load.php dosyasına erişimi engelle |
Dosyalarla İlgili Diğer Tedbirler
Güvenlik için alınacak tedbirlerde bir sınır yok yani alabildiğiniz kadar tedbir alabilirsiniz. Örneğin klasörlere ve dosyalara erişimi engellemek için Cpanel gibi yönetim panellerinden faydalanabilir, dilediğiniz klasörlere parola koruması ekleyebilirsiniz.
WordPress’in wp-content klasörünün ismini değiştirmeniz de mümkün ama sitenizin kaynağına bakıldığında bu dosyanın ismi kolayca öğrenebileceği için bunu bir tedbir olarak saymıyorum.
Son Sözler
Güvenli bir site için belki biraz fazla emek sarfediyoruz ama burada yaptıklarımıza harcadığınız zaman, siteniz çöktükten sonra geri getirmek için harcayacağınız zamanın çok ama çok daha azı. Bu nedenle üşenmeden gerekli tedbirleri almalı, içimiz rahat bir şekilde yazılarımızı yazmalıyız. Lütfen dosya güvenliği konusunda unutmuş olduğum noktaları ve düşüncelerinizi yorumlarınızda belirtiniz. Diğer güven tedbirlerinde görüşmek dileğiyle…
Orjinal kaynağa buradan ulaşabilirsiniz. Teşekkürler Yakuter.com.