WordPress Sıkılaştırma Rehberi

Giriş

WordPress dünya çapında en çok tercih edilen açık kaynak kodlu içerik yönetim sistemidir. Bu sistemin uygulama tasarımında PHP programlama dili ve veri tabanı tasarımında ise varsayılan olarak MySQL veri tabanı kullanılmaktadır. Popülerliğinden ötürü güvenlik araştırmacıların üzerinde araştırma yaptığı en gözde sistemlerden biridir. Bu yüzden üzerinde sıkça güvenlik açığı yayınlanmaktadır. Güvenlik açıklarını ele aldığımızda başta üç önemli faktör bulunmaktadır. İlk faktörde sistemin saf hali yani üzerine hiç bir eklenti kurulmadan tespit edilen güvenlik açıklarını kapsamaktadır. İkinci faktörde sistemin üzerinde kurulu eklentilere ait güvenlik açıklarını kapsamaktadır. Üçüncü faktörde ise sistemin üzerinde kurulu temalara ait güvenlik açıklarını kapsamaktadır. Diğer faktörlerde ise uygulama diline, veri tabanına ve web sunucusuna ait güvenlik açıkları gelmektedir. Bu yazının devamında sistemi daha güvenli hale getirmek için genel bütün önemli sıkılaştırma adımlarına değinilecektir.

Adımlar

  • Sistemin sürümü daima en güncel kararlı sürüme yükseltilmeli

Not: Bu işlemin arka planda otomatik olarak gerçekleşmesi için kök dosya dizininde, wp-config.php dosyası içerisinde en alt satırına aşağıdaki kodun eklenmesi gerekmektedir.

define( ‘WP_AUTO_UPDATE_CORE’, true );

 

veya

 

add_filter( ‘auto_update_core’, ‘__return_true’ );

  • Sistemin üzerinde yüklü olan eklentiler daima en güncel sürüme yükseltilmeli

Not: Bu işlemin arka planda otamatik olarak gerçekleşmesi için kök dosya dizininde, wp-config.php dosyası içerisinde en alt satırına aşağıdaki kodun eklenmesi gerekmektedir.

add_filter( ‘auto_update_plugin’, ‘__return_true’ );

  • Sistemin üzerinde yüklü olan temalar daima en güncel sürüme yükseltilmeli

Not: Bu işlemin arka planda otamatik olarak gerçekleşmesi için kök dosya dizininde, wp-config.php dosyası içerisinde en alt satırına aşağıdaki kodun eklenmesi gerekmektedir.

add_filter( ‘auto_update_theme’, ‘__return_true’ );

  • Varsayılan olarak kullanılan admin kullanıcı adı yerine tespiti zor farklı bir adın belirlenmesi

  • Kullanıcı adlarına ait parola bilgisinin karmaşık hale getirilmesi

  • PHP uygulama hata raporlarının detayları kullanıcılara gösterilmemeli

Not: Bu işlemin gerçekleşmesi için uygulama ana dosya dizininde, wp-config.php dosyası içerisinde kodun aşağıdaki şekilde düzenlenmesi gerekmektedir.

define( ‘WP_DEBUG’, false );

  • WordPress yönetim paneli üzerinden dosya düzenlemesi devre dışı bırakılmalı

Not: Bu işlemin gerçekleşmesi için uygulama ana dosya dizininde, wp-config.php dosyası içerisinde en alt satırına aşağıdaki kodun eklenmesi gerekmektedir.

define(‘DISALLOW_FILE_EDIT’, true);

  • Captcha mekanizması devreye alınmalı

  • İkincil doğrulama adımı mekanizması devreye alınmalı

  • Sunucu üzerinde WAF koruması devreye alınmalı

  • Güvenlik açığı oluşturan readme.htmlxmlrpc.php ve wp-trackback.php sayfaları site kök dosya dizini içerisinden kaldırılmalı

 

  • Uygulamaya erişim SSL güvenli bağlantı üzerinden sağlanmalı ve sunucu üzerinde zorunlu SSL kullanımı sağlanmalı

Not: SSL kurulumu sunucu üzerinde sağlandıktan sonra uygulamaya zorunlu SSL bağlantısı üzerinden erişmek için .htaccess dosyasında aşağıdaki gibi bir yapılandırma sağlanmalıdır. Bu kısımda www.example.com yerine kullanılacak mevcut host adı girilmelidir.

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
  • Web sunucu üzerinde aşağıdaki başlık bilgileri yapılandırılması önerilmekte

Strict-Transport-Security: max-age=31536000 ; includeSubDomains

X-XSS-Protection: 1; mode=block

X-Content-Type-Options: nosniff

X-Frame-Options: deny

  • Kullanıcı giriş panelinde bağlantı zorunlu olarak SSL desteği üzerinden sağlanmalı

Not: Bu işlemin gerçekleşmesi için uygulama ana dosya dizininde, wp-config.php dosyası içerisinde en alt satırına aşağıdaki kodun eklenmesi gerekmektedir. Eğer sunucu üzerinde güvenli SSL bağlantı desteği yoksa sayfaya erişim sağlanamayacaktır.

define( ‘FORCE_SSL_ADMIN’, true );

  • Kullanıcı giriş paneli gibi hassas sayfaların sadece belirli IP adresleri üzerinden gelen bağlantılara izin verilmeli

Not: Bu işlemin gerçekleşmesi için uygulama ana dosya dizininde, .htaccess dosyası içerisinde aşağıdaki kodun eklenmesi gerekmektedir. Bu kısımda “IP Address” yazısı yerine ulaşabilecek IP adresi belirtilmelidir.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^IP Address$
RewriteRule ^(.*)$ – [R=403,L]
</IfModule>

  • WordPress veri tabanı kullanıcısının sadece bağlı bulunduğu veri tabanı üzerinde SELECT, INSERT, UPDATE ve DELETE sorgu yöntemlerine izin verilmeli
  • WordPress dosya izinleri sunucu üzerinde düzenlenmeli

Bütün klasörler 755 veya 750 olmalı

Bütün dosyalar 644 veya 640 olmalı

wp-config.php dosyası 600 olmalı

  • Uygulama üzerinde kullanılan çerezlerde güvenli yapılandırma ayarları uygulanmalı

Not: Bu işlemin gerçekleşmesi için uygulama ana dosya dizininde, wp-config.php dosyası içerisinde en alt satırına aşağıdaki kodun eklenmesi gerekmektedir.

@ini_set(‘session.cookie_httponly’, true);

@ini_set(‘session.cookie_secure’, true);

@ini_set(‘session.use_only_cookies’, true);

  • PHP uygulama hata mesajları kullanıcılara gösterilmemeli

Not: Bu işlemin gerçekleşmesi için uygulama ana dosya dizininde, wp-config.php dosyası içerisinde en alt satırına aşağıdaki kodun eklenmesi gerekmektedir.

error_reporting(0);
@ini_set(‘display_errors’, 0);