WordPress Güvenliği ve Sıkılaştırma Dokümanı

Wordpress Güvenliği ve Sıkılaştırma Dokümanı

WordPress kısaca bir içerik yönetim (CMS) sistemidir. Hiçbir kodlama bilgisine sahip olmadan her türlü içeriği üretebilmenize ve yönetebilmenize ortam sağlayan bir alt yapıdır. WordPress ile kolayca bir içerik yönetim altyapısına sahip olarak birkaç kurulum adımından sonra internet sayfanızı yayına alabilirsiniz. Bunun için bir alan adına ve PHP ve MySQL destekli bir hostinge sahip olmanız yeterli olacaktır.

WordPress dünyanın en çok tercih edilen açık kaynak kod CMS yapılarından biridir. Son istatistiklere göre dünya üzerinde var olan internet sayfalarının %30’u WordPress altyapısı ile oluşturulmuştur. Global çaptaki holdingler, devlet kurumları, gazeteler ve benzeri birçok şirketin WordPress altyapısını tercih ettiğini görebilirsiniz.

Bu sistem büyük bir başarı ve popülerlik elde etmiştir. Ancak bu popülerliğinin getirmiş olduğu etkenlerden biri de siber saldırganların dikkatini çekmektedir. Siber saldırganlar genel olarak popüler sistemler üzerinde özellikle de açık kaynak sistemleri ilgi ile takip ederler. Dünya genelindeki internet sayfalarının üçte birinin WordPress altyapısına sahip olması da siber saldırıların bir kısmının bu CMS yönetim sistemine yapılması kaçınılmaz bir gerçektir.

Bu yazımızda WordPress kurulumu sonrası alınması gereken güvenlik önlemlerinden bahsedilmektedir. Bu güvenlik önlemleri ve sıkılaştırmalar sayesinde WordPress altyapınızı siber saldırganlara karşı korumak için gerekli adımları atmış olacaksınız. 

Not: Bu rehber yalnızca WordPress yönetim sistemini baz alarak yazılmıştır. Hosting kaynaklı sorunlar, kişisel bilgisayar problemleri ve benzeri diğer kaynaklar bu makaleye dahil edilmemiştir.

WordPress Güvenliği ve Sıkılaştırma Rehberi

WordPress kurulumu sonrasında aşağıda belirtilen şekilde alacağınız güvenlik önlemleri ile sisteminizi güvenli hale getirerek sisteminizi siber saldırılar karşısında bir adım öne çıkabilirsiniz.

Gelişen ve sürekli yenilenen siber saldırılara karşı Wordpress alt yapısına sahipseniz bu konuyu ciddiye alarak temel güvenlik önlemlerinizi almak zorundasınız. Aksi takdirde siber saldırganların hedefi haline gelebilir veya içerik yönetim sisteminiz ve datalarınız zarar görebilir.

Güvenlik bir süreçtir ve bu sürecin doğru bir şekilde yönetilmesi gerekmektedir. Güvenliğin %100 sağlanamayacağını unutmamalı ve bu süreci yöneterek risk oranınızı azaltabileceğinizi hatırlatmak isteriz.

Kişisel veya şirket bilgisayarınızı, çevrimiçi davranışlarınızı ve iç işlemlerinizi güvence altına almak atılacak olan adımların başında gelir.

Güvenlik üç ana alandan oluşur: İnsanlar, Süreç ve Teknoloji

Her biri birbirleriyle senkronize bir uyum içerisinde olmak zorundadır. Bir alandaki zafiyet tüm sistemi etkileyebilir. Bu sebeple Wordpress güvenliğini düşündüğünüz zaman, kişisel hatalarınızı, hosting ve benzeri barındırma sistemlerindeki zafiyetleri, süreçleri ve teknolojinin gelişimini göz ardı etmemelisiniz.

WordPress Güvenliği Nasıl Sağlanır?

Aşağıdaki bölümde WordPress güvenlik kontrolleri ve almanız gereken güvenlik önlemleri belirtilmiştir. Bu önlemleri alarak, sisteminizi güvenli bir hale getirebilir ve sıkılaştırma yapabilirsiniz.

WordPress Genel Güvenlik Kontrolleri

Erişim Sınırlama; WordPress sitenize erişimi olan hesapların sayısını minimumda tutmak ve erişecek kişilerin yetkilerini doğru bir şekilde ayarlayarak güvenliğinizi sağlamlaştırabilirsiniz. Bir sistemde birden fazla “Yönetici” yetkisi zaaflarınızın artmasına sebep olacağını unutmamalısınız.

Eklenti ve Temalar; WordPress siteniz üzerinde kullanılmayan tüm eklentileri ve temaları kaldırın. Bunlar en az ayrıcalık ilkesi ile gizliliği, kullanılabilirliği ve bütünlüğü korumaya yardımcı olur. Bu sayede kullanmadığınız tema veyahut eklentilerde ortaya çıkabilecek zafiyetlerden etkilenmezsiniz.

İzolasyon: Sisteminiz tehlikeye girmesi durumunda oluşabilecek hasar miktarını en aza indirecek şekilde yapılandırılmalısınız. Mümkünse tek bir barındırma hesabında çok sayıda farklı web sitesine sahip olmaktan kaçının. Bir hosting üzerinde birden fazla internet sitesi yayını yapılıyorsa, diğer sitelerin zafiyetleri üzerinden tüm sistemin etkileneceğini belirtmek isteriz.

Güvenli Yedekleme; Güvenli yerlerde bütünlüğü doğrulanmış yedeklemeler barındırın. Web sitenizi zarar görmüşse geri yükleyebildiğinizden emin olmak için ara sıra yedeklemelerin bütünlüğünü doğrulamanız gerekir. Web sitenizin güvenliğini tehlikeye atabilecek siber saldırıların sonrasında bir acil durum kurtarma planınız olmalıdır.

Güncellemeleri Unutmayın; Eklentiler ve temalar dahil olmak üzere WordPress kurulumunuzla güncel kalmak için elinizden gelenin en iyisini yapın. Sitenizin üzerinde kurulmuş olan temalar ve eklentilerin güncellemelerini mutlaka yapmak zorundasınız. Aynı zamanda WordPress sürüm güncellemelerini de çok geçmeden yapmanızı tavsiye ederiz.

Güvenlik Güncelleştirmeleri; Güvenlik açıkları tüm yazılımları etkileyen bir durumdur. Herhangi bir sistem üzerinde bir açıklık tespit edilebilir ve kötüye kullanılabilir. Bu tüm yazılım ve donanımları etkileyebileceği gibi WordPress içerik yönetim sistemini de etkileyebilir. Güncel kalmak için, WPVulnDB.com tarafından sağlanan güvenlik açığı veritabanına abone olmanızı tavsiye ederiz. Ayrıca WordPress’in güvenlik güncellemeleri çıktığında yönetim panelinizden anında haberdar olabilir ve bir tıklama ile sisteminizin güvenlik güncellemesini yaparak ortaya çıkan zafiyetlere karşı koruma sağlayabilirsiniz.

Güvenilir Kaynaklar Kullanın; Güvenilir olmayan kaynaklardan eklenti / tema almayın, indirmeyin veya kullanmayın! Eklenti kurmak istiyorsanız mutlaka WordPress.org üzerinden eklentilerinizi sisteminize yükleyin. Üçüncü parti internet sitelerinin dağıtmış olduğu eklentiler ve temalardan uzak durun. Özellikle de ücretli tema veya eklentileri ücretsiz olarak dağıtan illegal siteler üzerinde büyük zafiyetler, virüsler veyahut kötü niyetli hackerlar olduğunun altını çizmek isteriz. Ücretsiz dağıtım yapan bu gibi illegal siteler temalarınızın veyahut eklentilerin içerisine zararlı kodlar koyarak sisteminizi hackleyebildiğini unutmayın!

WordPress Kurulum Sonrası Güvenlik Adımları

WordPress kurulumunu tamamladıktan sonra aşağıdaki yönergelerimizi izleyerek kurulum sonrası sıkılaştırmaları gerçekleştirebilirsiniz.

Wp-config.php Sıkılaştırma

WordPress altyapısının en önemli dosyası wp-config.php dosyasıdır. Bu dosya içeriğinde yapacağınız bazı ayarlamalar ile sistem güvenliğini artırabilirsiniz. Öncelikle wp-config.php dosyasının güvenliğini doğrulamamız gerekiyor.

Apache sunucular üzerinde wp-config.php dosyasının güvenliğini sağlamak için .htaccess dosyası içeriğine aşağıdaki kodu giriniz. Bu kod sayesinde wp-config.php dosyasının içeriği dışarıdan çağrılarak okunamaz ve dışarıdan erişime kapatılmış olacaktır.

<files wp-config.php>
order allow,deny
deny from all
</files>

Aynı zamanda farklı eklentiler kullanarak wp-config.php dosyasını html klasörünün dışına taşımak güvenlik noktasında artı değer sağlayacaktır. Bu dosya WordPress günlüklerinin en önemli dosyasıdır. Wp-config.php içerisinde veritabanına bağlantı için gerekli bilgiler bulunmaktadır.

Wp-config.php Dosyasını Şifrelemek

Diğer bir wp-config.php dosyasına erişimi sınırlandırmanın yolu wp-config.php dosyasının içeriğini şifrelemektir. Şifreleme için ionCube, Zend Guard veya en basiti ve ücretsiz olan phpr.org sitesindeki aracı kullanabilirsiniz. Bu sayede wp-config.php dosyasına erişebilen kişiler yalnızca kriptolanmış datayı görebilirler ve database bağlantı bilgileriniz gizli kalacaktır.

Wp-config.php Dosyasının Konumunu Değiştirmek

Wp-config.php dosyası çok önemli olduğu için sadece şifrelemeye güvenemeyiz. Şifreleme yöntemleri muhakkak ki profesyonel saldırganlar tarafından bir süre sonra kırılabilir. Eğer wp-config.php dosyamızın lokasyonunu değiştirirsek erişim konusunda bir önemli adım daha atmış olacağız.

Wp-config.php dosyasının bulunduğu dizini veya dosyanın direk ismini değiştirebiliriz. Bunu yapmak için de sitemizin ana dizinindeki wp-load.php dosyasını açarak wp-config.php yazan yerleri kendi klasörümüze uygun şekilde değiştirmemiz gerekiyor.

Not: Her güncellemeden sonra bu ayarlar eski haline döneceği için kalıcı hale getiren eklentileri kullanabilirsiniz.

Wp-load.php Dosyasına Erişimi Engellemek

Güvenli WordPress’in bir diğer adımı da wp-load.php dosyasına erişimi engellemektir.  .htaccess dosyasını kullanarak wp-config.php dosyasına dışarıdan erişimi engellediğimzi gibi wp-load.php dosyasına olası yetkisiz erişimler için kısıtlama getirebiliriz.

<files wp-load.php>
order allow,deny
deny from all
</files>

WordPress Plugins Dizinini Korumak

WordPress sisteminizde kullandığınız eklentiler üzerinde de zafiyetler ortaya çıkabilir. Saldırganlar da bu eklentilerin zafiyetlerini kullanarak sisteminize yetkisiz erişim sağlayabilir. Bu nedenle WordPress’in Plugins isimli eklenti klasörüne de güvenlik tedbirleri almak zorundayız. Normal şartlar altında bu dizine erişimde içerisindeki klasörlerin listelenmemesi gerekiyor. Ancak bazı sürümlerde veya kullanıcı hatası sebebi ile bu dizin açık olabilir ve klasörler listelenebilir. Bu sayede de saldırganlar sistemde bulunan eklentiler hakkında bilgi sahibi olabilir. Dışarından gelen isteklerde eklentilerinizi görmelerini engellemek istiyorsanız bu klasör içerisine index.html isimli bir boş dosya oluşturarak dizinin listelenmesini engelleyebilirsiniz.

Not: Güncel WordPress sürümlerinde varsayılan olarak boş bir index.php dosyası bulunur.

WordPress .htaccess Dosyasına Erişimi Engellemek

WordPress için Apache sunucularda .htaccess dosyası çok önemlidir. Bu dosya genelde WordPress’in standart yönlendirme içeriğini barındırır. Diğer bir yandan yukarıda belirttiğimiz gibi yetkisiz erişimleri engellemek için de kullanabilirsiniz. Aşağıdaki kodu da .htaccess dosyamıza eklersek, .htaccess dosyamızın güvenliğini de sağlamış oluruz.

<files .htaccess>
order allow,deny
deny from all
</files>

WordPress Hata Ayıklama Modunu Kapatmak

WordPress hata mesajlarını kapatarak olası zafiyetlerin ortaya çıkmasını engelleyebilirsiniz. Wp-config.php dosyası içeriğinde aşağıdaki kodu ekleyerek hata ayıklama modunu kapatabilirsiniz. Debug modu olası Wordpress hatalarının görülmesi için kullanılır ve genelde geliştiriciler bu modu aktif ederek sistemdeki hataları incelemek için kullanırlar. Kod üzerindeki “false” değerli modu kapatır veya “true” şeklinde değiştirilerek hata modunu tekrar aktif hale getirebilirsiniz.

define( ‘WP_DEBUG’, false );

WordPress’i SSL Yayınına Zorlamak

WordPress sitenizin SSL üzerinden yayın yapmasını tavsiye ederiz. SSL üzerinden yayın yapabilmek için bir SSL sertifikasına sahip olmalısınız. SSL sertifikaları ücretli satılabildiği gibi ücretsiz sürümleri de mevcuttur. Bu noktada Let’s encript veya Cloudflare kullanarka ücretsiz bir SSL sertifikasına sahip olabilirsiniz. Sitenizin SSL üzerinden yayın yapması hem Google tarafında pozitif etki yaratır hem de saldırganlara karşı önemli bir adım atmış olursunuz. Sitenizin SSL üzerinden yayın yapma işlemlerini ayarladıktan sonra wp-config.php dosyası içeriğine aşağıdaki kodu ekleyerek SSL’i zorunlu kılabilirsiniz.

define(‘FORCE_SSL_ADMIN’, true);

WordPress Otomatik Güncellemeleri Açmak

Diğer yazılımlarda da olduğu gibi WordPress üzerinde de zafiyetler ortaya çıkmakta ve WordPress ekibi tarafından sürekli olarak tespit edilen bu zafiyetler kapatılmaktadır. Zafiyetlerin kapatılabilmesi için Wordpress ekibi bir güncelleme yayınlar. Bu güncellemeleri manuel olarak yapabildiğiniz gibi aşağıdaki kodu wp-config.php dosyanıza ekleyerek otomatik olarak yapabilirsiniz.

define(‘WP_AUTO_UPDATE_CORE’, true);

WordPress Temp Klasörünü Belirlemek

WordPress’in güncellemelerinde olduğu gibi eklenti ve temaların güncellemelerinde de bir TEMP klasörü üzerinde işlemler gerçekleştirilir. Bu klasörün yazılabilir olması gereklidir. Klasörünüzü wp-config.php üzerinde aşağıdaki kodu ekleyerek güncellemelerin doğru bir şekilde tamamlanmasını sağlayabilirsiniz. Bu kod upload dizinini göstermelidir ve dosya yolu tam olarak belirtilmelidir. Aşağıdaki kod Centos işletim sisteminde varsayılan WordPress Upload klasör yoludur.

define(‘WP_TEMP_DIR’,’/var/www/html/wp-content/uploads/’);

Eklenti ve tema güncellemelerinde bazı durumlarda WordPress dosyaları doğru bir şekilde çekemeyebilir veya hata verebilir. Aşağıdaki kodu wp-config.php dosyanıza ekleyerek hata veren güncellemelerin doğru bir şekilde yapılmasını sağlayabilirsiniz.

Zamanlanmış Görevleri Kapatmak

WordPress’in özelliklerinden biri de zamanlanmış görevlerdir. Ancak zamanlanmış görevler bazı durumlarda sisteminize aşırı yüklenmelere sebep olabilir. Diğer bir yandan saldırganlar sisteminize sızdığı zaman kalıcı olabilmek adına, WordPress’in CRON işlevini kullanabilirler. Aşağıdaki kodu wp-config.php dosyanıza ekleyerek WordPress’in zamanlanmış görevlerini durdurabilirsiniz.

define(‘DISABLE_WP_CRON’, true);

Dosya Düzenleme Editörünü Kapatmak

WordPress üzerindeki temaların dosyalarını yönetim paneli üzerindeki kod editörü ile düzenleyebilirsiniz. Ancak bu özellik beraberinde bir zafiyet doğurabilir. Özellikle de siber saldırganların sisteminizdeki bir zafiyet üzerinden temanızın dosyalarına zararlı kod enjekte ettiklerine şahit olabiliyoruz.  Aşağıdaki kodu wp-config.php dosyanıza ekleyerek WordPress’in tema dosyalarını düzenleme özelliğini kapatabilirsiniz. Bu sayede güvenliğinizi bir adım daha ön plana çıkartacaksınız.

define(‘DISALLOW_FILE_EDIT’, true);

Eşsiz Doğrulama Anahtarlarını Değiştirmek

WordPress’in eşsiz doğrulama anahtarları kullanıcının çerezlerinde saklanan bilgilerin şifrelemesini geliştiren rastgele değişkenler kümesidir. Toplamda kurulum sonrası ile dört güvenlik anahtarı oluşturulur.

AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY ve NONCE_KEY

Bu güvenlik anahtarı ile WordPress üzerindeki yetkileri kriptolamak için kullanılır. Web sitenizin güvenliğine katkı sağlanır ve kırılabilmesi zorlaştırılır. Buradaki anahtarlar, çerezlerin şifrelenmesinden, ajax işlemlerinde kullanılacak “Nonce” olarak belirtilen işlem güvenliği anahtarlarına kadar etki etmektedir. Standart kurulumda aşağıdaki şekilde karşımıza gelir.

define(‘AUTH_KEY’,         ‘eşsiz karakter kümenizi buraya yerleştirin’);
define(‘SECURE_AUTH_KEY’,  ‘eşsiz karakter kümenizi buraya yerleştirin’);
define(‘LOGGED_IN_KEY’,    ‘eşsiz karakter kümenizi buraya yerleştirin’);
define(‘NONCE_KEY’,        ‘eşsiz karakter kümenizi buraya yerleştirin’);
define(‘AUTH_SALT’,        ‘eşsiz karakter kümenizi buraya yerleştirin’);
define(‘SECURE_AUTH_SALT’, ‘eşsiz karakter kümenizi buraya yerleştirin’);
define(‘LOGGED_IN_SALT’,   ‘eşsiz karakter kümenizi buraya yerleştirin’);
define(‘NONCE_SALT’,       ‘eşsiz karakter kümenizi buraya yerleştirin’);

WordPress’in wp-config.php dosyası içeriğindeki bu anahtarları aşağıdaki gibi karmaşıklaştırarak güvenliğinizi üst düzeye çıkarabilirsiniz.

define(‘AUTH_KEY’,         ‘ty/46|p5CJZ}b_N-I<LeB]i wdk bLai’);
define(‘SECURE_AUTH_KEY’,  ‘%vO$%}:n% 6B$Tm/Idd d, e9pdx#O’);
define(‘LOGGED_IN_KEY’,    ‘|Gdl2mPeYaJa^nyD/yg?1g cj) 3@@B’);
define(‘NONCE_KEY’,        ‘K+e}.P|( %4g^NO@S e6%+ &&S#L’);
define(‘AUTH_SALT’,        ‘UaLw) -T _*1m:<Vo 1ZU6M L} JD J:Z(a]3’);
define(‘SECURE_AUTH_SALT’, ‘u5OT P /1[ bq EbE6/ e}W5 H mt+ dd3’);
define(‘LOGGED_IN_SALT’,   ‘Vv0 @ V3[q 8 UeH z@ z<#d sde3d f 33%&’);
define(‘NONCE_SALT’,       ‘4D3 S%:Y;3 N*>t 8~1>~a VQd7 8[,->D [sw3I’);

WordPress Dosya ve Dizin Ayarlarını Yapmak

WordPress’in varsayılan izin şeması aşağıdaki şekilde olmalıdır.

Klasörler – 750 / Dosyalar – 640

Klasörleriniz için 750 izni, dosyalarınız için ise 640 izni vererek güvenli hale getirebilirsiniz. Bu düzenleme için FileZilla veya benzeri bir FTP aracı kullanabileceğiniz gibi hosting firmanız ile iletişime geçmek zorunda kalabilirsiniz. Sitenizin performansını ve kullanılabilirliğini olumsuz yönde etkileyebileceği için izin değişiklikleri yapmadan önce hosting firmanız ile görüşmenizi tavsiye ederiz. Diğer bir yandan hiçbir dosya veya dizinin 777 yetkisine sahip olmadığından emin olunuz! Bir dosya veya dizin 777 şeklinde ayarlanmışsa zafiyet oluşturur!

SSH üzerinden dizinler için aşağıdaki komutu girebilirsiniz.

/ path / to / your / wordpress / install / -tipi d -exec chmod 750 {} \;

SSH üzerinden dosyalar için aşağıdaki komutu girebilirsiniz.

/ path / to / your / wordpress / install / -type f -exec chmod 640 {} \;

Yükleme Klasörünü Güvenli Hale Getirmek;

WordPress’in resim ve diğer dosyaları yükleme klasörü olan Upload dizinini olası çalıştırılabilir dosyaların yüklenmesine karşın (Shell, bash script gibi…) güvenli hale getirmelisiniz. Saldırganlar sisteminizde tespit ettikleri bir upload zafiyetini kullanarak Uploads dizinine Shell erişimi elde edecek zararlı dosyalar yükleyebilirler. Bu durumu engellemek için /wp-content/uploads/ dizini içerisine .htaccess dosyası oluşturmalı ve aşağıdaki kodu /wp-content/uploads/.htaccess dosyasına eklemelisiniz. Bu sayede saldırganların sisteminizin yükleme klasörüne zararlı dosyalar indirip, çalıştırmasını engellemiş olacaksınız.

# Kill PHP Execution
<Files ~ “\.ph(?:p[345]?|t|tml)$”>
deny from all
</Files>

Kullanıcı Hesap Politikası

WordPress kurulumu sırasında bir administrator hesabı eklemeniz istenir. WordPress kurulumunu varsayılan olarak tamamladıysanız, sisteminizde bir yönetici hesabı oluşturmuş olacaksınız. Ancak bruteforce ataklarına karşı bu hesabın kullanıcı adını değiştirmenizi tavsiye ederiz. Aynı zamanda birden fazla yönetici hesabı bulundurmak, zafiyetlerinizi artırabilecek etkenler arasında gelir. Mümkün olduğunca tek bir yönetici hesabı kullanarak sisteminizdeki diğer kullanıcılar için editör, yazar veya kullanıcı gibi hesap yetkileri tanımlamanızı tavsiye ederiz. Hesap oluştururken genel olarak kullanıcılar isimlerini kullanıcı adı olarak belirleyebilirler. Bu da tahmin edilebilir olmasını sağlar ve sistemde zafiyet oluşturur. Kullanıcılarınızın veya yöneticilerinizin bu tarz bir kullanıcı adı belirlemesini engellemenizi tavsiye ederiz.

Parolalar ve Kullanıcı Bilgileri

WordPress üzerinde oluşturduğunuz kullanıcılar için Wordpress varsayılan olarak karmaşık bir parola politikası uygular. Ancak bazı kullanıcılar “12345678” gibi güvenilmez ve tahmin edilebilir parolalar oluşturabilir. Sisteminizdeki bu tarz kullanıcıları uyararak karmaşık bir parola oluşturmanızı tavsiye ederiz. Aksi takdirde siber saldırganların bu parolaları tahmin ederek sisteminize giriş yapma olasılıkları çok yüksektir. Diğer bir yandan oluşturmuş olduğunuz parolaların aylık veya üç aylık peryotlarla değiştirilmesini tavsiye ederiz. 

WordPress Arama Fonksiyonunu Güvenli Hale Getirmek

WordPress’in ?s= parametresi arama fonksiyonunu çalıştırır. Ancak WordPress’in arama özelliği siber saldırganlar tarafından kötüye kullanılabilir. Birçok siber saldırgan sisteminizde sürekli arama gerçekleştirerek (saniyede binlerce sorgu) Mysql yükünüzü artırabilir ve sunucunuzun aşırı yüklenerek (RAM ve CPU kullanımını şişirir) cevap vermesini engelleyebilir ve servis dışı bırakabilir. WordPress’in arama parametrelerine sınır getirerek bu durumu engelleyebilirsiniz.

Aşağıdaki kod parçacığını temanızın Functions.php dosyasında uygun bir yere ekleyerek arama sorgularını limitleyebilirsiniz. Örnek kodda bu limit kişi başına 50 sorgu olarak optimize edilmiştir. Sisteminize ve yapınıza göre bu rakamı artırabilir veya azaltabilirsiniz.

 // Get user IP in WordPress
function get_the_user_ip() {
            if ( ! empty( $_SERVER [‘ HTTP_CLIENT_IP’] ) ) {
            //check ip from share internet
            $ip = $_SERVER[‘ HTTP_CLIENT_IP’];
            }else {
            $ip = $_SERVER[ ‘ REMOTE_ADDR’];
            }
            return apply_filters ( ‘wpb_get_ip’, $ip );
}
function search_ visitor_ ip_ block ($query)
  $visitorIPLimit = 50;
if(preg_match(‘/ google| yandex| yndx | spider| bot | slurp | msn | bing | adsbot| AdIdxBot| search | face | baidu | duck | sogou | youdao | ccbot | alexa | microsoft /i’, gethostbyaddr (get_the_user_ip()))){
             return $query;
            }else {
                        $visitor IP Count = get_option ( ‘visitor_i p_count’. get_the_user_ip() );              
                        $is_block = get_transient ( ‘ visitor_ip_block ‘.get_the_user_ip () );
                        $will_deleted = get_option (‘visitor_ip_block’. get_the_user_ip ( ).’- deleteafter30min’);
     if($is_block = = ‘blocked’) :
                                    wp_die (‘Çok fazla arama yaptığınız için bloke edildiniz ve 30 dakika beklemelisiniz.’);
else :                 
     if ( $query->is_search ) :
   if(($visitorIP Count >= $visitor IPLimit) && $will_deleted == ‘yes’) : delete_option (‘visitor_ip_count’ .get_the_user_ip ());
delete_option (‘visitor_ip_block’ .get_the_user_ip (). ‘-deleteafter30min’)
elseif( $visitorIP Count < $visitorIPLimit ) :
                                                           $visitorIP Count += 1 ;
                                                           update_ option( ‘ visitor_ip_count’. get_the_user_ip(), $visitor IPCount ) ;
                                                           return $query;
                                               else :       
set_transient (‘visitor_ip_block’. get_the_user_ip( ), ‘blocked’,30);
update_option (‘visitor_ip_block’ .get_the_user_ip( ).’-deleteafter 30 min’,’yes’);
wp_die (‘Çok fazla arama yaptığınız için bloke edildiniz.’);
                                               endif;
                                    endif;
                        endif;
            }
}
//hook filters to searchadd_filter (‘pre_get_posts’ ,’ search_ visitor_ip _block’);

WordPress Pingback Saldırılarına Karşı Önlem Almak

WordPress’in Pingback özelliği saldırganlar tarafından kötüye kullanılarak sisteminizde aşırı bir yük oluşturulabilir ve servis dışı kalma saldırılarında (DDOS) kullanılabilir. Bu duruma engel olmak için kullanmıyorsanız WordPress’in Pingback özelliğini kapatmanızı tavsiye ederiz. Aşağıdaki kodu temanızın functions.php dosyasında uygun bir yere ekleyerek Pingback fonksiyonunu kapatabilirsiniz.

// Pingback kapatmak
function remove_x_pingback($headers) {
    unset($headers[‘X-Pingback’]);
    return $headers; }

WordPress’in XML-RPC Erişimini Kapatmak

WordPress’in XML-RPC dosyası geçmişte birçok kez istismar edilmiştir. Bu dosyanın en önemli iki zafiyeti saldırganlar tarafından kullanılmaktadır. Birincisi sitenize yetkisiz erişim elde etmek için brute force adını verdiğimiz kaba kuvvet saldırılarında kullanılmasıdır. Saldırganlar bu dosyayı kullanarak kullanıcı adı ve şifre denemeleri yaparak sisteminize erişim elde edebilirler. İkincisi ise XML-RPC dosyası kullanılarak sisteminize servis dışı bırakma (DDOS) saldırıları yapabilmeleridir.

Bu saldırılara karşı sisteminizi korumak için temanızın function.php dosyasına aşağıdaki kodu eklemenizi tavsiye ederiz. Bu sayede XML-RPC fonksiyonu devre dışı kalacaktır.

// XML RPC Kapat
add_filter(‘wp_headers’, ‘remove_x_pingback’);
add_filter(‘xmlrpc_enabled’, ‘__return_false’);

Aynı şekilde XML-RPC dosyanızı .htaccess üzerinden de erişime kapatabilirsiniz. Ana dizininizde bulunan .htaccess dosyanıza aşağıdaki kodu ekleyerek dosyaya erişimi kapatabilirsiniz. Kodda bulunan ip adresine sabit ip adresinizi eklerseniz yalnızca sizin bu dosyaya erişiminiz olacaktır.

# Block WordPress xmlrpc.php
<Files xmlrpc.php>
order deny,allow
deny from all
allow from 123.123.123.123
</Files>

Wordpres REST API Özelliğini Kapatmak

WordPress 4.4 ile beraber gelen REST API özelliğini kullanmıyorsanız kapatmanızı tavsiye ederiz. Bu api özelliği siber saldırganlar tarafından kötü niyetli olarak kullanılabilir ve sisteminizin aşırı yüklenmesini sağlayarak servis dışı kalmasına sebep olabilir. WordPress Rest-API özelliğini kapatmak için temanızın functions.php dosyasına aşağıdaki kodu girmeniz yeterli olacaktır.

// Filters for WP-API version 1.x
add_filter( ‘json_enabled’, ‘__return_false’ );
add_filter( ‘json_jsonp_enabled’, ‘__return_false’ );
// Filters for WP-API version 2.x
add_filter( ‘rest_enabled’, ‘__return_false’ );
add_filter( ‘rest_jsonp_enabled’, ‘__return_false’ );

Kodun bu bloğuna dikkat ederseniz isteklerde yer alan “info” bilgileri de kapatarak saldırganların bilgi almasını engelleyebilirsiniz.

// Remove REST API info from head and headers
remove_action( ‘xmlrpc_rsd_apis’, ‘rest_output_rsd’ );
remove_action( ‘wp_head’, ‘rest_output_link_wp_head’, 10 );
remove_action( ‘template_redirect’, ‘rest_output_link_header’, 11 );

WordPress Sürüm Bilgisini Kapatmak

WordPress varsayılan olarak temanızın <head> kodları arasına sürüm numarasını basmaktadır. WordPress sürüm numarasının bilinmesi de saldırganların daha başarılı ve hedef odaklı saldırılar yapmasına neden olabilir. WordPress’in sürüm bilgisini kapatmak için aşağıdaki kodu temanızın functions.php dosyasına ekleyerek engelleyebilirsiniz.

remove_action(‘wp_head’, ‘wp_generator’);

Aynı şekilde bilgi ifşasına sebep olacak aşağıdaki özellikleri de kapatarak saldırganların bilgi almasını engelleyebilirsiniz. Kodu yine temanızın functions.php dosyasına eklemeniz gereklidir.

remove_action(‘wp_head’, ‘rsd_link’);
remove_action(‘wp_head’, ‘feed_links’, 2);
remove_action(‘wp_head’, ‘feed_links_extra’, 3);
remove_action(‘wp_head’, ‘wlwmanifest_link’);
remove_action(‘wp_head’, ‘wp_shortlink_wp_head’, 10, 0 );
remove_action(‘wp_head’, ‘print_emoji_detection_script’, 7);
remove_action(‘admin_print_scripts’, ‘print_emoji_detection_script’);
remove_action(‘wp_print_styles’, ‘print_emoji_styles’);
remove_action(‘admin_print_styles’, ‘print_emoji_styles’);
remove_action( ‘wp_head’, ‘rest_output_link_wp_head’, 10 );
remove_action( ‘wp_head’, ‘wp_oembed_add_discovery_links’ );

WordPress Veritabanı Güvenlik Önlemleri

WordPress veritabanı internet sitenizin çalışabilmesi için gerekli tüm bilgileri tutar ve depolama sağlar. Elbette ki saldırganlarda SQL saldırıları gerçekleştirmek için otomatik kod çalıştıran uygulamalarla zafiyet arayarak veritabanınıza erişmeye veya verileri değiştirmeye çalışacaklardır. WordPress kurulumu sırasında veritabanı eki varsayılan olarak wp_ şeklinde gelir ve çoğu zaman varsayılan wp_ ekini değiştirmeden kurulumu tamamlarız. Bu noktada saldırganlar için maalesef ki bir zafiyet bırakmış olacaksınız. Varsayılan kurulumda veri tabanı ön ekini (_wp_) değiştirmediyseniz, kurulum tamamlandıktan sonra aşağıdaki kodları kullanarak veritabanınızın ön ekini değiştirebilirsiniz.

Not: Bu işlem sırasında sisteminizi kullanılamaz bir hale getirebilirsiniz. İşleme başlamadan önce veritabanınızın bir yedeğini almanızı tavsiye ederiz.

Aşağıdaki sorguları hosting kontrol panelinizde phpmyadmin SQL bölümünü kullanarak tamalayınız. Bu işlemler tamamlandığı zaman wp-config.php dosyası içerisinden de veritabanı ön ekini değiştirmeniz gerekmektedir.

Not: Aşağıdaki sorguda veritabanı ön eki wpsecure123_ olarak yeniden tanımlanmıştır. Bu değeri kendinize göre özelleştirmeniz tavsiye edilir.

RENAME table `wp_commentmeta` TO `wpsecure123_commentmeta`;
RENAME table `wp_comments` TO `wpsecure123_comments`;
RENAME table `wp_links` TO `wpsecure123_links`;
RENAME table `wp_options` TO `wpsecure123_options`;
RENAME table `wp_postmeta` TO `wpsecure123_postmeta`;
RENAME table `wp_posts` TO `wpsecure123_posts`;
RENAME table `wp_terms` TO `wpsecure123_terms`;
RENAME table `wp_termmeta` TO `wpsecure123_termmeta`;
RENAME table `wp_term_relationships `TO` wpsecure123_term_relationships`;
RENAME table `wp_term_taxonomy` TO `wpsecure123_term_taxonomy`;
RENAME table `wp_usermeta` TO `wpsecure123_usermeta`;
RENAME table `wp_users` TO `wpsecure123_users`;

Not: Teknik bilginiz yoksa, üçüncü parti WordPress eklentileri ile de basit ve kolay bir şekilde veritabanı ön ekini değiştirebilirsiniz.

Wp-Admin Klasörüne Erişimi Sınırlamak

WordPress’in yönetim paneline erişmek için bgasecurity.com/wp-admin şeklinde giriş yapmaktayız. Standart kurulumla wp-admin klasörüne erişim açık durumdadır. Ancak bu saldırganlar tarafından da bilindiği gibi brute force gibi ataklarla parolalarınızın kırılmasına ve yetkisiz erişimler alınmasına sebep olabilir. Bu gibi saldırılara karşı korunmak için Wp-admin klasörüne erişimi üç türlü gerçekleştirebiliriz.

Birinci erişim kısıtlama yöntemimiz .htaccess dosyası kullanarak wp-admin klasörüne erişimlerde sabit bir ip adresi tanımlamaktır. Eğer sabit bir ip adresine sahipseniz erişimi aşağıdaki şekilde sınırlandırabilirsiniz.

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName “Access Control”
AuthType Basic
order deny,allow
deny from all
#izin verilecek ip adresi
allow from 123.123.123.123

Bu kod bloğunda 123.123.123.123 ip adresine erişim izni verilmiştir ve diğer ip adreslerinden gelen bağlantı istekleri kabul edilmeyecektir.

İkinci erişim kısıtlama yöntemimiz ise ikincil bir şifre koymaktır. Wp-admin klasörü altına bir .htaccess dosyası ekleyerek ikincil bir parola sürecini dahil edebilirsiniz. Wp-admin klasörüne erişmek istenildiği zaman öncelikle Apache üzerinden tanımlanan .htpassword erişimi sağlanır. Bu erişim sağlandığı takdirde wp-admin klasörüne erişim izni verilir.

Wp-admin klasörü içerisinde .htaccess dosyasına aşağıdaki kodu ekleyerek ve .htpassword dosyası tanımlayarak (.htpasswd dosyasının içeriğine user ve password tanımlamanız gerekmektedir) aktif edebilirsiniz.

AuthType Basic
# this text is displayed in the login dialog
AuthName “Wp-Admin Koruması!”
# Bu dosya yolunu siz belirleyin ve .htpasswd dosyanızı tanımlayın.
AuthUserFile /path/to/.htpasswd
require valid-user

Not: htpasswd dosyasına user ve password tanımlamak için Htpasswd Generator kullanmanız gerekmektedir.

Üçüncül erişim kısıtlama yöntemimiz ise wp-admin klasör yolunu değiştirmektir. Klasör yolunu değiştirmek için WordPress Wp-admin eklentilerinden olan Lockdown WP Admin eklentisini veya benzeri bir eklentiyi sisteminize kurabilirsiniz. Bu eklentiler wp-admin klasörünü değiştirmenizde sizlere yardımcı olacaktır.

Diğer WordPress Güvenlik Ayarları

Saldırganlar WordPress üzerindeki klasörleri, eklentileri ve tema dosyalarını görebilmek ve bu sayede hedefli bir saldırı yapabilmek için bilgi toplamaya özen gösterirler. Bu noktada bilgi toplamalarına da engel olmak zorundayız. Versiyon ifşalarını engellemek için yukarıda belirttiğimiz güvenlik önlemlerini alabildiğimiz gibi, dizin listelemeyi iptal etmek, sunucu imzasını kaldırmak ve dosya yükleme boyutlarını sınırlandırmak gibi erişim kısıtlayıcı tedbirleri de almayı unutmayın. Bu tedbirler için yine .htaccess dosyamızı kullanabiliriz. Aşağıdaki kodları .htacess dosyamıza eklediğimiz takdirde sunucumuzdaki dizin listeleme, sunucu imzasını yazma özelliklerini devre dışı bırakmış olacağız. Aynı zamanda WordPress üzerinden dosya yüklemeyi sınırlandırarak güvenliği bir adım daha artırabiliriz.

# dizin listelemeyi iptal et
Options All -Indexes
# sunucu imzasını kaldır
ServerSignature Off
# dosya yükleme boyutunu 10mb ile sınırlandır
LimitRequestBody 10240000

İki Adımlı Kimlik Doğrulama

WordPress yönetim paneli girişini iki adımlı kimlik doğrulama uygulamaları kurarak daha güvenli bir hale getirebilirsiniz. Bu uygulamalar sayesinde parolanızı girdikten sonra tek kullanımlık şifreler oluşturarak yönetici veya kullanıcı girişlerinde ek güvenlik önlemi almış olacaksınız. Aşağıdaki uygulamalar iki adımlı kimlik doğrulama sağlamaktadır ve sisteminize eklenti olarak kurularak güvenli doğrulama sağlayacaklar.

  • Authy
  • Duo
  • Rublon
  • Two-Factor

WordPress Yedekleme

Sağlam bir yedekleme stratejisi, tüm WordPress kurulumunuzun (WordPress çekirdek dosyaları ve veritabanınız da dahil) düzenli bir şekilde zamanlanmış anlık görüntülerini güvenilir bir yerde tutmayı içermelidir. Düzenli olarak WordPress database ve ftp yedeği alarak sisteminizde oluşabilecek sorunlarda geri yükleme yapabilirsiniz.

Düzenli olarak yedekleme yapabilmek için, WordPress yedekleme eklentileri kullanabilir veya manuel olarak SSH ve benzeri sistemler üzerinden yedek alabilirsiniz.

Ücretsiz Çevrimiçi Tarayıcılar

Bir sistemi hedefleyen siber saldırganlar ilk olarak ücretsiz çevrim içi tarayıcılar veya uygulamalar kullanarak sistemde zafiyet araması yaparlar. Bu tarama araçları sayesinde WordPress CMS sistemi üzerindeki güvenlik zafiyetleri tespit edilebilir. Aşağıdaki tarayıcıları kullanarak belirli peryotlarda siber saldırganlardan önce sisteminizi taramanızı tavsiye ederiz.

  • Virustotal
  • Sitecheck
  • Unmaskparasites
  • Redleg AW-Snap
  • Wordfence
  • Sucuri Security
  • VaultPress
  • Norton Web Yöneticisi Aracı
  • Google Arama Konsolu

Kesinti Tespiti ve Çalışma Süresi İzleme

Siber saldırganların yapmış olduğu ataklar veyahut hosting tabanlı sorunlar nedeni ile web sayfanız servis dışı kalabilir. Bu gibi durumlardan haberdar olmak için ücretsiz olarak hizmet veren web sitelerini kullanabilirsiniz. Bu siteler belirli ve kısa peryotlar içerisinde web sitenizi ziyaret eden botlar kullanarak kesintileri tespit edebilirler ve size kesintiler hakkında e-posta göndererek bilgi iletebilirler.

  • UptimeRobot
  • Pingdom

Güvenlik Eklentileri

Yukarıda belirtmiş olduğumuz birçok özelliği ve güvenlik sistemini sağlamak için özel olarak tasarlanmış ve ücretsiz olarak sunulan Wordpress eklentileri de mevcuttur. Kod bilginiz yoksa veyahut sisteminize zarar verebilme ihtimaline karşın aşağıdaki eklentileri kurarak sisteminizi güvenli bir hale getirebilirsiniz. Bu eklentiler sistem güvenliğini denetlemekten, siber saldırılara karşı WAF (Web Uygulama Güvenlik Duvarı) özelliğine kadar birçok desteği size sunabilirler.

  • All In One WP Security & Firewall
  • Sucuri Security
  • iThemes Security
  • Wordfence Security
  • WP fail2ban
  • SecuPress
  • BulletProof Security
  • VaultPress

Not: Bu dokümanı makaleler sayfamızdan PDF formatında indirebilirsiniz.

Yorum Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*
*

two − 2 =

Mail listemize üye olarak eğitim fırsatlarını kaçırmayın!
Eğitim ve ücretsiz etkinliklerizden haberdar olmak için e-posta listesimize üye olun!.