Web Sitesi Güvenliği
Web sitesi güvenliği ; Web sitenizin, üyelerin, (kullanıcılar), veritabanının, dosyalarınızın ve sunucunuzla ilgili kurmak istediğiniz güvenlik zincirinin ilk adımıdır.
Bu yazımda kullanıcı taraflı yapılabilecek, web sitesi temel güvenlik önlemlerini herkesin anlayıp uygulayabileceği basit bir dille aktarmaya çalışacağım.
Gizlilik
Gizlilik ve güvenlik paralel birbirleriyle bağlantılı olgulardır.Güvenlik ihlal edildiğinde, gizlilik ihlal edilmiş olur.Gizlilik kısmen ihlal edildiğinde ise güvenlik zincirini kıran ilk kapı aralanmış olur.
Bu önermeyi belirtmemin nedeni sisteminizle ilgili herhangi bir şeyi paylaşırken çok dikkatli olmanız gerektiğidir.Bu, bir işi yapması için yetki verdiğiniz kişi yada program, bilgisayarınızı izleyen bir virüs yada ağınızı izleyen bir takipçi olabilir.
Bir işi yapması için birisiyle bir bilgi paylaşmanız gerekiyorsa, o kişinin özellikle sisteminizin tamamına erişmemesi, sadece yapacağı işle ilgili alanlara erişebilmesini sağlamalısınız.Bunu sadece iş yapacağı arayüzlere erişebileceği geçici giriş bilgi ve protokelleri oluşturarak bu geçici bilgileri paylaşarak yapın.
Aynı şekilde programlar için de geçerli.Gizlilik ve güvenliği sağlamak güvenli gözüyle baktığınız sistemlerde bile alışkanlıklarınızla ilgilidir.
Sitelerle yapacağınız bağlantıların SSL ile şifrelenmiş olmasına dikkat edin.
Sitenize saldırılmadan önce arge ile olabildiğinde bilgi toplandığını unutmayın.
Bilgisayarınız
Bilgisayarınız için özellikle Windows sistemlerde sadece antivirüs yazılımı kullanmanın yeterli olmayacağını bilmelisiniz.Bu tür firewall’ların kullanım amaç ve isteklerinize göre optimize edilmesi gerektiğini lütfen unutmayın.
Güvenlik disiplinini bilmediğiniz özellikle anonim bilgisayarlardan web sitenize hosting paneli, ftp, admin paneli gibi kısımlara girmeyin.Bu tür bilgisayarlar kendi sitenizle ilgili yapacağınız tek şey ziyaretçi olmak olsun!
Şifre Seçimi
Mail hesapları dahil, web sitenizle ilgili tüm şifreler çok güçlü ve karmaşık olmalıdır.Özellikle alfanumerik karakterler (harf, rakam) dışında özel karakterler de içeren (örn:@#$-*/_ gibi) şifreler tercih etmelisiniz.
Bir yerde kullandığınız bir şifreyi farklı bir yerde tekrar kullanmayın.Örneğin veritabanı bağlantısı yapan kullanıcı şifresiyle yönetim paneli, ftp kullanıcı şifrelerinin aynı olmaması gibi.
Ftp Kullanımı
Sisteminizde anonim bağlantılara izin vermeyin.Anonim bağlantılara izin veren hosting platformlarını tercih etmeyin.
Ftp bağlantısı için kendini kanıtlamış ve güvenilir açık kaynak bir program yada güvenli protokoller kullanabilirsiniz.Bu tür programları sadece kendi sitesinden indirin.
Browser Kullanımı
Giriş formlarında şifrelerin hatırlanması büyük kolaylık.Aynı zamanda ise kötü bir alışkanlıktır.Klavye kullanmaktan bu kadar korkmamalısınız.
Yetki ve İzinler
Admin paneli, dosyalar, programlar, bağlantı protolleri gibi kısımlarda işlem yapacak her şeyin yetkisinin ne olacağını kesin şekilde belirleyin.
- Sitenizde çalışacak bir yazara, sistem ayarlarını görüntüleme sayfasının yetkisi vermemek.
- Mysql bağlantısı sağlaması için oluşturduğunuz mysql kullanıcısının yetkilerini kısıtlamak.
- İstekleri filtrelemek, programlarınızın hangi dosyalar üzerinde hangi izinlere sahip olacağını belirlemek.
Chmod Ayarlamaları
Sistemde hangi dosyanın kim tarafından açılabileceği, yazılabileceği, okunabileceğini chmod izinleri belirler.
Amaçsızca bolca verilmiş gereksiz chmod izinleri büyük güvenlik açığına neden olabilir.Kullanıcı alışkanlıkları da göz önünde bulundurulduğunda genelde bu konuda hep sıkıntı yaşanır.
Sağlıklı şekilde çalışabilmeleri için dosyaları 404, dizinleri ise 505 olarak planlamak yeterlidir.
Yazma/silme işlemleri için dosyaları 604, dizinleri ise 705 olarak planlayabilirsiniz.
Seçenek 1 : Konsol yönetimine sahipseniz komutlarla toplu olarak chmod düzenlemesi yapabilirsiniz.
find /home/kullanici/public_html/ -type d -exec chmod 755 {} ;
find /home/kullanici/public_html/ -type f -exec chmod 644 {} ;
Seçenek 2 :Ftp programınızla da toplu olarak düzenleme yapabilirsiniz.
Toplu düzenleme sonrası yazma/silme yapılacak dosya ve dizinlerin chmod değerlerini özel olarak ayarlamayı unutmayın.
Upload Alanları
Upload dizinleri resim, medya dosyalarını depo etme yada ziyaretçinin dosya indirmesi amacıyla kullanılır.
Genellikle scriptinizde bulunan açıklarla bu dizinlere zararlı dosyalar yüklenir ve çalıştırılmak istenir.Bu dosyalar üzerinden sisteminize sızılabilir.
Özetle upload işlemlerini amacına uygun şekilde organize etmelisiniz.
Upload dizinini sadece resim yükleme alanı olarak kullanıyorsanız bu dizinde başka tür dosyaların (php, zip, rar, docx vb.) çalışmasına izin vermemek iyi bir planlama olacaktır.
Upload dizininde oluşturacağınız bir .htaccess dosyası ve kurallarıyla dışarıdan erişimi sınırlayabilirsiniz.Örneğin ;
<files *.php>
order allow,deny
deny from all
</files>
Stratejik Noktaları Gizleyin
Sisteminizde config.php, functions.php gibi doğrudan dışarıdan çağrılması gerekmeyen dosyaları dış erişime kapayın.
<files config.php>
order allow,deny
deny from all
</files>
Dizin Listelemeyi Kapatın
Dizin listeleme sitenizde dizinlerin tarayıcı tarayından “siteniz.com/dizin” şeklinde girildiğinde o dizinde bulunan öğelerin listelenmesidir.Listelenmesini istemediğiniz dizinlere boş bir index.html dosyası oluşturabilirsiniz.
Htaccess dosyasınıza şu kodu ekleyerek dizin listelemeyi kapatabilirsiniz ;
Options -Indexes
Dosya Güvenliği ve Kripto
İçinde mysql, ftp erişim bilgileri gibi çok önemli bilgiler barındıran dosyalarınızı şifreleyebilirsiniz.
Bu dosyaların içeriğin okunsa bile kriptolandığından verilere ulaşmak için decode edilmesi gerekir.
Bu hizmeti veren BTT-Crypt gibi bazı ücretsiz servis sitelerini internetten bulabilirsiniz.
Yine bu tür dosyaların chmod düzenlemesiyle güvene alın.
Dosya ve Dizin Şifreleme
Bazı dosya ve dizinlere sadece sizin erişebileceğiniz ayrıca bir güvenlik protokolü ekleyiebilirsiniz.
Bunu en iyi ve kesin çözüm olarak htaccess ile yapabilirsiniz.
Htaccess ile dizin/dosya şifrelemesinin nasıl yapıldığını araştırabilirsiniz.Genelde hosting kontrol panelinizden kolayca yapabileceğiniz bir kısım bulunur.
Elle oluşturmak isterseniz Dynamic Drive‘ın ilgili servisini kullanabilirsiniz.
1) Dosyanın bulunduğu dizine bir .htaccess dosyayı oluşturun.Örnek bir .htaccess dosyası içeriği şöyle görünecektir ;
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /home/mysite/public_html/.htpasswd
AuthGroupFile /dev/null
<Files config.php>
require valid-user
</Files>
2) Şifre Dosyası : Yukarıda ki .htaccess dosyası içinde yolu belirlen şifre dosyası .htpasswd dosyasını istediğiniz bir dizinde oluşturun.Htaccess dosyası için içinde .htpasswd dosyasının yeri doğru şekilde belirtilmelidir.Örnek bir .htpasswd dosyası içeriği şöyle görünecektir ;
admin:rhwrEKdGei3cY
Burada “admin” sizin belirleyeceğiniz kullanıcı adı, “rhwrEKdGei3cY” ise sizin belirleyeceğiniz şifrenizin şifrelenmiş halidir.
Erişim Engelleme
Admin paneli, özel dizinler gibi sadece sizin erişim yapmak isteyeceğiniz bazı alanlar mutlaka vardır.
Bu alanların erişimini sadece sizin veya belli kişilerin erişebilecekleri şekilde düzenleyin.
Uzaktan bir programın erişmesi gerekiyorsa sadece o programın çalıştığı sunucu ip adresine izin verebilirsiniz.
Dizin için örnek ;
<Directory /home/hostuser/dizinim>
order allow,deny
deny from all
allow from 10.0.0.1 # Tek ip adresine izin ver
allow from 192.168.0.0/24 # Komple classa izin ver
</Directory>
Dosya için örnek ;
<Files onemli.php>
order allow,deny
deny from all
allow from 10.0.0.1 # Tek ip adresine izin ver
allow from 192.168.0.0/24 # Komple classa izin ver
</Files>
Hataları Gizlemek
Sisteminizde hatalar oluşabilir, önemli olan bunları sadece sizin görüyor olmanızdır.Hatalar sisteminizin hangi noktalarda kararsız olduğunu gösterebilir.
Özellikle arama motorlarında bu hataların izlerine rastlanır, arama motorları kararsız sistemleri tespit etmek için iyi bir avlama aracıdır.
Mümkün olduğunca hataları gizlemelisiniz.Bunu php için hata gösterimi kapatarak yapabilir, hata dosyalarının dışarıdan okunmasını engelleyebilir, hatta hiç hata tutulmamasını sağlabilirsiniz.
# Hataları Gizle
php_flag display_errors off
php_flag html_errors off
# ErrorLogu Komple Kapat
php_flag log_errors off
<files error_log>
order allow,deny
deny from all
</files>
Form Güvenliği
İletişim, yorum ve benzeri amaçlarla oluşturduğunuz formları flood, spam ve brute force ataklara karşı koruyun.
Bu formlara spam doğrulama (chapta) özelliği ekleyerek formların bir saldırı aracı olarak kullanılmasını önleyin.
Başka Neler Yapılabilir ?
Daha bir çok şey yapabilirsiniz, bu tamamen sizin hayal gücünüze bağlı.
Sunucu yönetimine sahip olmasanız bile bazı ayarları kontrol edebilirsiniz.
.htaccess dosyasını şöyle düzenleyebilirsiniz.
# Shell Script Engelle
Options -ExecCGI
AddHandler cgi-script .pl .py .jsp .sh .cgi
# Sunucu imzasını kaldır
ServerSignature Off
# Safe Mod Aktif
php_flag safe_mode on
php_flag register_globals off
Sitenize, bad bots list olarak fişlenmiş herkesçe bilinen zararlı botları engellemek isteyebilirsiniz.
Çok yararlı bir makale olmuş elinize sağlık. Bazıları hariç bir çoğunu uyguladım.
Teşekkür ederim.
Sunucuda find /home/kullanici/public_html/ -type d -exec chmod 505 {} ; yapmayı denedim fakat “missing argument to find -exec” hatası verdi. Biraz araştırdıktan sonra sondaki “;” ün önüne “” işareti gelmeliymiş aşağıdaki gibi çalıştı bilginize.
find /home/kullaniciadi/public_html/ -type d -exec chmod 505 {} ;
Merhabalar.
“;” (noktalı virgül) ‘den önce “” karakteri olması gerekiyor.Sitemde tema değiştirdiğim için bu alan ekrana yanlış basılmış, bunun için üzgünüm.Şuan düzelttim.
Yazımdaki hatayı şuan düzelttim.Siz de aşağıdaki şekilde tekrar denerseniz sevinirim ;
find /home/kullanici/public_html/ -type d -exec chmod 755 {} ;
find /home/kullanici/public_html/ -type f -exec chmod 644 {} ;