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.
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’ );
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’ );
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’ );
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 );
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);
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]
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: deny
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 );
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>
Bütün klasörler 755 veya 750 olmalı
Bütün dosyalar 644 veya 640 olmalı
wp-config.php dosyası 600 olmalı
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);
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);