Merhaba,
Bu yazıda sizlere önemli bir php özelliği olan safe_mode'dan bahsedeceğim. Günümüzde, özellikle Ipv4 adreslerin tükenme tehlikesi nedeni ve maliyet avantajları nedeni ile, web siteleri kendilerine dedike sunucularda değil, ortak kullanıma açık, paylaşımlı hosting hesaplarında barınmakta. Paylaşımlı hosting sistemleri , bu tip sorunlara çözüm bulurken, özellikle güvenlik noktasında çok büyük problemlere neden olabilmekte. Aynı zamanda paylaşımlı hosting hizmeti veren firmaları da "güvenlik mi? kullanılabilirlik mi?" gibi bir cevaplanması zor bir soruna maruz bırakmakta. Öncelikle size tehlikenin ne olduğunu ufak bir script ile anlatıp, nedenini ve çözümlerini tartışalım istiyorum. Bu scripti safe_mode ve open_basedir kısıtlamaları olmayan bir sunucuda çalıştırdığınızda, sunucunun "/etc/passwd" dosyasına erişim sağlayabilirsiniz.
<? $myfile = fopen ('/etc/passwd', 'r') or die ("Dosyayi acamiyorum!"); while (!feof($myfile)){ $line = fgets($myfile,5000); print "$line "; } fclose($myfile); ?>
Bu scriptin daha komplike olanlarını sizler c99 , r57 gibi isimlere duymuş olabilirsiniz. Php safe_mode, basitçe bu tip sorunların önüne geçmeye çalışan bir mekanizma. Php scriptlerinin, kendisini çalıştıran kullanıcıdan farklı bir kullanıcıya ait olan dosyalara erişimini kısıtlamakta.
Safe_mode ile benzer bir amaca hizmet eden bir başka php mekanizma ise open_basedir dir. Bu direktif ise php derleyicisine, scripti çalıştıran kulanıcının ev dizini haricindeki dosyalara erişmemesini sağlar.
Bu iki direktifin aktif olması , paylaşımı sunuculardaki çokça problemi gidermektedir. Tabi php'nin, php.ini dosyalarını çalışma esnasında değiştirebildiği "ini_set" gibi fonksiyonlarını kapatmazsak, bu değişkenler, scriptin kendisi tarafından değiştirilebilir, devredışı bırakılabilir.
Bu arada, çok önemli bir noktayı atlamamamız lazım ki, hep scripti çalıştıran kullanıcıdan bahsettik, ancak bazı sunucular, özellikle performans kaygısı ile , apache ye gömülü mod_php kullanmaktalar ki bu şekilde çalışan sunucularda, tüm php işlemleri, web sunucusunun kullanıcısı ile çalışmaktadır. Dolayısı ile bu php direktifleri çalışmaz hale gelmektedir.
Tabi tüm bu tehlike, bu şartları sağladığınızda ortadan kalkmıyor. Zira sadece php kısmında alınmış tedbirler bunlar. Cgi desteği olan bir sunucuda, python, perl, bash gibi scriptin dilleri ile aynı işlemler rahatça yapılabilir. Bu programlama dillerinde, php.ini mantığı olmadığı için, bir seçenek haricinde yapılacak şey yok. Cgi desteğini kapamak ![]()
Sonuç olarak, eğer sitenizi kendinize ait bir sunucuda barındıramıyorsanız , güvenliğiniz açısından, size paylaşımlı hosting sağlayan sunucuda aramanız gereken özellikler:
- php safe_mode un aktif olması
- open_basedir kısıtlamasının aktif olması
- sunucunun suphp olarak çalışması
- cgi desteği verilmemesi
Unutmayın, en güvenli sistem kapalı olanıdır ![]()