WordPress günümüzde çok popüler bir web sitesi yazılımı ve blog’lar, firma web siteleri, online alışveriş siteler ve hatta büyük portallar gibi pek çok site bu CMS (içerik yönetim sistemi) üzerinde kurulu. WordPress’in kullanımı kolay ama bazı güvenlik problemleri de var. Bugün onları nasıl çözeceğimizi anlatacağım.
1. WordPress’i XSS (cross site scripting) saldırılarından korumak
Problem
Yazılım geliştiriciler her zaman GET ve POST isteklerine karşı koruma yapmaya uğraşıyorlar fakat bu her zaman yeterli olmayabiliyor. Web sitemizi XSS saldırılarından ve değişkenler ile GLOBALS _REQUEST’in değiştirilmesinden de korumamız gerekiyor.
Çözüm
Aşağıdaki kod bloğu XSS saldırılarına, değişkenler ve GLOBALS _REQUEST’in değiştirilme denemelerine karşı koruma sağlar. Bu kodu .htaccess dosyası içine (ana klasörde) yapıştırın.
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|<).*script.*(\>|>) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
Bu kod tüm istekleri kontrol eder ve eğer bir script tag’i içeriyorsa veya GLOBALS ve _REQUEST değişkenlerinin değerlerini değiştirmeye kalkarsa blokluyor ve bir 403 hata sayfası gösteriyor.
2. Ek bilgi göstermeyi kaldırın
Problem
Eğer yönetici paneline giriş yaparken yanlış bilgi girersek kibar CMS’miz bunun hakkında bilgi (geçersiz kullanıcı veya şifre) veriyor. Bir bilgisayar korsanının girdiği login bilgilerinin yanlış olduğunu görmesini mi istersiniz yoksa hiçbir bilgi görmemesini mi?
Çözüm
functions.php dosyasını açın (wp-content/themes/kullandığınız-tema-adı) ve aşağıdaki satırı ekleyin:
add_filter(’login_errors’,create_function(’$a’, “return lisanssız;”));
3. SSL kullanımına zorlama
Problem
Eğer web sitesi ile aranızdaki transferleri korumak isterseniz SSL protokolü kullanılabilir. Verinin bütünlüğü ve gizliliği konusunda koruma sağlar. Bunu WordPress’de yapmak çok kolay:
Çözüm
Öncelikle hizmet sağlayıcınızın SSL destekleyip desteklemediğini öğrenin. Eğer destekliyorsa we-config.php dosyasını açın ve aşağıdaki kodu ekleyin:
define(’FORCE_SSL_ADMIN’, true);
Wordpress çok sayıda sabit kullanır ve FORCE_SSL_ADMIN bunlardan sadece bir tanesi. Yönetici paneline giriş yaparken SSL kullanımını mecburi kılar.
4. wp-config dosyasını korumak için .htaccess kullanımı
Problem
wp-config.php MYSQL sunucusuna ve veritabanına erişimde ihtiyaç duyulan tüm bilgileri içerir. Bu sebeple bu dosyayı korumak önemlidir.
Çözüm
.htaccess dosyanıza aşağıdaki kodu ekleyin:
<files wp-config.php>
order allow,deny
deny from all
</files>
Bu dosyaya herkesin erişimini engellemiş oluyoruz.
5. WordPress sürümünü gizlemek
Problem
WordPress otomatik olarak sürüm numarasını kaynak koduna ekler ve sitenize saldırmayı planlayanlar için bu önemli bir bilgidir. Her bir WP sürümünün kendine özgü hataları ve güvenlik açıkları vardır. O yüzden bu bilgiyi gizlemeliyiz.
Çözüm
functions.php dosyasını açın (wp-content/themes/kullandığınız-tema-adı/) ve aşağıdaki kodu ekleyin:
remove_action(’wp_head’, ’wp_generator’);
Ayrıca sitenin ana klasöründen readme.html dosyasını da silmelisiniz çünkü onda da WP sürümü hakkında bilgi olabilir.
6. Spam yapanı veya bot’ları IP bazlı yasaklamak
Problem
Spam yapanlar ve botlar can sıkıcı olabiliyorlar. Çözüm onları IP bazlı olarak yasaklamak. Tabi bu proxy üzerinden gelen spam script’lerine karşı sizi korumaz.
Çözüm
Sürekli spam yapan IP adresini .htaccess dosyasına ekleyerek sitenize erişimini engelleyebilirsiniz. Aşağıdaki kodu .htaccess dosyasına ekleyin ve IP adresini spam yapanın adresi ile değiştirin.
<Limit GET POST PUT>
order allow,deny
allow from all
deny from 123.456.789
</LIMIT>
7. Zararlı URL isteklerine karşı koruma sağlayacak bir plugin yazımı
Problem
Bilgisayar korsanları genelde çeşitli kötü amaçlı istekler ile zayıflık bulmaya çalışırlar. WordPress bunlara karşı iyi koruma sağlıyor fakat biz ekstra koruma ekleyeceğiz.
Çözüm
blockbadqueries.php adında yeni bir dosya yaratıp, içine aşağıdaki kodu yapıştırıp wp-content/plugins klasörüne koyun. Yönetim panelinde diğer eklentileri yaptığınız gibi aktif edebilirsiniz.
<?php
/*
Plugin Name: Block Bad Queries
Plugin URI: vellumweb.com
Description: Protect WordPress Against Malicious URL Requests
Author URI: vellumweb.com/
Author: VellumWeb
Version: 1.0
*/
global $user_ID;
if($user_ID) {
if(!current_user_can(’level_10’)) {
if (strlen($_SERVER[’REQUEST_URI’]) > 255 ||
strpos($_SERVER[’REQUEST_URI’], “eval(“) ||
strpos($_SERVER[’REQUEST_URI’], “CONCAT”) ||
strpos($_SERVER[’REQUEST_URI’], “UNION+SELECT”) ||
strpos($_SERVER[’REQUEST_URI’], “base64″)) {
@header(“HTTP/1.1 414 Request-URI Too Long”);
@header(“Status: 414 Request-URI Too Long”);
@header(“Connection: Close”);
[MENTION=10487]ExiT[/MENTION];
}
}
}
?>
8. Hotlinking
Problem
Sitenizde depolanmış olan resimleri başka sitelerin kullandığını düşünün. Bu bantgenişliğinizin harcanmasına yol açacaktır.
Çözüm
.htaccess dosyasına aşağıdaki kodu ekleyin
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?websitem\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
websitem\.com yerine kendi site adresinizi ve /images/nohotlink.jpg yerine hangi resimin görünmesini istiyorsanız onu koyun (harici url de olabilir, ör. imageshack).
9. Admin hesabını kaldırın
Problem
Eğer kullanıcı adı bilinirse şifre bulma denemeleri yapmak daha kolay olur. Ve WP varsayılan kullanıcı adı da admin.
Çözüm
Aşağıdaki veritabanı sorgusunu çalıştırın (yeni login ismini yazin yerine istediğiniz yeni kullanici adini girin).
UPDATE wp_users SET user_login = ’yeni_login_ismini_yazin’ WHERE user_login = ’Admin’;
10. Sunucudaki klasörleri koruyun
Problem
Çoğu web barındırma sağlayıcısı sunuculardaki klasörlerin içeriğinin görünmesine izin verebiliyor. Örnek olarak eğer www.websiteniz.com/wp-includes adresine gittiğinde içeriğini görebilirsiniz. Tabi ki bu pek de güvenli değil.
Çözüm
Yine .htaccess dosyasını düzenliyoruz:
Options All -Indexes
Kaynak : http://turlubicim.com/wordpress-10-guvenlik-ipucu.html
1. WordPress’i XSS (cross site scripting) saldırılarından korumak
Problem
Yazılım geliştiriciler her zaman GET ve POST isteklerine karşı koruma yapmaya uğraşıyorlar fakat bu her zaman yeterli olmayabiliyor. Web sitemizi XSS saldırılarından ve değişkenler ile GLOBALS _REQUEST’in değiştirilmesinden de korumamız gerekiyor.
Çözüm
Aşağıdaki kod bloğu XSS saldırılarına, değişkenler ve GLOBALS _REQUEST’in değiştirilme denemelerine karşı koruma sağlar. Bu kodu .htaccess dosyası içine (ana klasörde) yapıştırın.
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|<).*script.*(\>|>) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
Bu kod tüm istekleri kontrol eder ve eğer bir script tag’i içeriyorsa veya GLOBALS ve _REQUEST değişkenlerinin değerlerini değiştirmeye kalkarsa blokluyor ve bir 403 hata sayfası gösteriyor.
2. Ek bilgi göstermeyi kaldırın
Problem
Eğer yönetici paneline giriş yaparken yanlış bilgi girersek kibar CMS’miz bunun hakkında bilgi (geçersiz kullanıcı veya şifre) veriyor. Bir bilgisayar korsanının girdiği login bilgilerinin yanlış olduğunu görmesini mi istersiniz yoksa hiçbir bilgi görmemesini mi?
Çözüm
functions.php dosyasını açın (wp-content/themes/kullandığınız-tema-adı) ve aşağıdaki satırı ekleyin:
add_filter(’login_errors’,create_function(’$a’, “return lisanssız;”));
3. SSL kullanımına zorlama
Problem
Eğer web sitesi ile aranızdaki transferleri korumak isterseniz SSL protokolü kullanılabilir. Verinin bütünlüğü ve gizliliği konusunda koruma sağlar. Bunu WordPress’de yapmak çok kolay:
Çözüm
Öncelikle hizmet sağlayıcınızın SSL destekleyip desteklemediğini öğrenin. Eğer destekliyorsa we-config.php dosyasını açın ve aşağıdaki kodu ekleyin:
define(’FORCE_SSL_ADMIN’, true);
Wordpress çok sayıda sabit kullanır ve FORCE_SSL_ADMIN bunlardan sadece bir tanesi. Yönetici paneline giriş yaparken SSL kullanımını mecburi kılar.
4. wp-config dosyasını korumak için .htaccess kullanımı
Problem
wp-config.php MYSQL sunucusuna ve veritabanına erişimde ihtiyaç duyulan tüm bilgileri içerir. Bu sebeple bu dosyayı korumak önemlidir.
Çözüm
.htaccess dosyanıza aşağıdaki kodu ekleyin:
<files wp-config.php>
order allow,deny
deny from all
</files>
Bu dosyaya herkesin erişimini engellemiş oluyoruz.
5. WordPress sürümünü gizlemek
Problem
WordPress otomatik olarak sürüm numarasını kaynak koduna ekler ve sitenize saldırmayı planlayanlar için bu önemli bir bilgidir. Her bir WP sürümünün kendine özgü hataları ve güvenlik açıkları vardır. O yüzden bu bilgiyi gizlemeliyiz.
Çözüm
functions.php dosyasını açın (wp-content/themes/kullandığınız-tema-adı/) ve aşağıdaki kodu ekleyin:
remove_action(’wp_head’, ’wp_generator’);
Ayrıca sitenin ana klasöründen readme.html dosyasını da silmelisiniz çünkü onda da WP sürümü hakkında bilgi olabilir.
6. Spam yapanı veya bot’ları IP bazlı yasaklamak
Problem
Spam yapanlar ve botlar can sıkıcı olabiliyorlar. Çözüm onları IP bazlı olarak yasaklamak. Tabi bu proxy üzerinden gelen spam script’lerine karşı sizi korumaz.
Çözüm
Sürekli spam yapan IP adresini .htaccess dosyasına ekleyerek sitenize erişimini engelleyebilirsiniz. Aşağıdaki kodu .htaccess dosyasına ekleyin ve IP adresini spam yapanın adresi ile değiştirin.
<Limit GET POST PUT>
order allow,deny
allow from all
deny from 123.456.789
</LIMIT>
7. Zararlı URL isteklerine karşı koruma sağlayacak bir plugin yazımı
Problem
Bilgisayar korsanları genelde çeşitli kötü amaçlı istekler ile zayıflık bulmaya çalışırlar. WordPress bunlara karşı iyi koruma sağlıyor fakat biz ekstra koruma ekleyeceğiz.
Çözüm
blockbadqueries.php adında yeni bir dosya yaratıp, içine aşağıdaki kodu yapıştırıp wp-content/plugins klasörüne koyun. Yönetim panelinde diğer eklentileri yaptığınız gibi aktif edebilirsiniz.
<?php
/*
Plugin Name: Block Bad Queries
Plugin URI: vellumweb.com
Description: Protect WordPress Against Malicious URL Requests
Author URI: vellumweb.com/
Author: VellumWeb
Version: 1.0
*/
global $user_ID;
if($user_ID) {
if(!current_user_can(’level_10’)) {
if (strlen($_SERVER[’REQUEST_URI’]) > 255 ||
strpos($_SERVER[’REQUEST_URI’], “eval(“) ||
strpos($_SERVER[’REQUEST_URI’], “CONCAT”) ||
strpos($_SERVER[’REQUEST_URI’], “UNION+SELECT”) ||
strpos($_SERVER[’REQUEST_URI’], “base64″)) {
@header(“HTTP/1.1 414 Request-URI Too Long”);
@header(“Status: 414 Request-URI Too Long”);
@header(“Connection: Close”);
[MENTION=10487]ExiT[/MENTION];
}
}
}
?>
8. Hotlinking
Problem
Sitenizde depolanmış olan resimleri başka sitelerin kullandığını düşünün. Bu bantgenişliğinizin harcanmasına yol açacaktır.
Çözüm
.htaccess dosyasına aşağıdaki kodu ekleyin
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?websitem\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
websitem\.com yerine kendi site adresinizi ve /images/nohotlink.jpg yerine hangi resimin görünmesini istiyorsanız onu koyun (harici url de olabilir, ör. imageshack).
9. Admin hesabını kaldırın
Problem
Eğer kullanıcı adı bilinirse şifre bulma denemeleri yapmak daha kolay olur. Ve WP varsayılan kullanıcı adı da admin.
Çözüm
Aşağıdaki veritabanı sorgusunu çalıştırın (yeni login ismini yazin yerine istediğiniz yeni kullanici adini girin).
UPDATE wp_users SET user_login = ’yeni_login_ismini_yazin’ WHERE user_login = ’Admin’;
10. Sunucudaki klasörleri koruyun
Problem
Çoğu web barındırma sağlayıcısı sunuculardaki klasörlerin içeriğinin görünmesine izin verebiliyor. Örnek olarak eğer www.websiteniz.com/wp-includes adresine gittiğinde içeriğini görebilirsiniz. Tabi ki bu pek de güvenli değil.
Çözüm
Yine .htaccess dosyasını düzenliyoruz:
Options All -Indexes
Kaynak : http://turlubicim.com/wordpress-10-guvenlik-ipucu.html