Samet AKIN

Samet AKIN

ALAYLI YAZILIMCI

Php’de güvenlik önlemleri ve öneriler

Yazımda bahsedecek olduğum ayarları kendim kullanıyorum ve yararını gördüm hatta bu ayarları göz ardı ettiğim için dilimde yanmadı değil. Bu ayarlar size çok ileri seviyede güvenlik sağlamaz ancak piyasada 2-3 program bulup sağa sola saldıranları uzaklaştırmış olursunuz. Asıl önemli olan siteniz hacklendiğinde saldırıyı yapan kişinin sunucu üstüne neler yapabileceğidir. Bunun nedeni ise ; saldırıyı yapan kişi sizin sitenize ulaşmak için sadece sizin sitenizde denemeler yaparak değil aynı sunucuda barınan başka bir yazılım üzerinden girebilir ve sizin yazılımınıza ulaşabilir. Bu yüzden sadece ataklara karşı önlem almak yerine olası hacklenme olasılığına karşı önlem almanızı tavsiye ederim. ( Yaşadım ve tecrübe ettim hiç eğlenceli değil )

 

Php’de Önlem

1-  Kullanmadığınız ve hiç ihtiyacınız olmayacak olan fonksiyonları kapatın. php.ini ayarlarında nasıl yapacağınızı gösterdim. Bu işlemi Cpanel üzerinden de yapabilirsiniz.

Kendim şahsen sunucuda birçok fonksiyonu kapattım. Zararlı gördüğün shell dosyalarındaki fonksiyon isimlerini dahi kapattım. Zip olarak yüklenen dosyayı zipten çıkarma, resim oluşturma için kullanılan hatta sunucuya dosya yüklemek için kullanılan move_uploaded_file’ı bile kapattım. Ben şahsen resim,dosya yükleme için farklı yöntemler kullanıyorum.

2- Resim yükleme işlemlerinde sunucuya gerekli olmadığı sürece gif dosyası kesinlikle yüklemeyin.  Gif’ yüklüyorsanız bile  GD kütüphanesi kullanarak yükleyin.

3- Arkaplanda Ajax, JS, jQuery ile yaptığınız işlermlerde kesinlikle token kullanın ve dışarıdan başkalarının ulaşmasını engelleyin.

4- Her veriyi session’a atmayın. Tmp klasore gereğinden fazla dolduğunda mysqlde sorgu yapamazsınız sorun verir ve sessionları unset ile silin

5- Dosyalarınızı include ederken tam yol kullanın.

6- Sunucuda CGI desteğini kapatın. Python, perl ve bash  cgi desteği olan sunucularda çalışır ancak siz bunları kullanmıyorsanız kapatın.

7- Veritabınızı uzaktan erişimi kapatın. Plesk panelin daha önce kullandığım sürümlerinde uzaktan erişim herkese açıktı. Buna kesinlikle dikkat edin.

8- Oluşturduğunuz cookie’leri ip,tarayıcı gibi özel bilgilerle şifreleyin. Cookieler çalındığında bile geçersiz olsun.

 

$_SERVER['COMSPEC']  /* windows sunucularında cmd.exe'nin yerini gösterir bu yüzden windows sunucularında bu değişkeni ilk satırda boşaltın */
addslashes()  /* bu fonksiyon sql injection için çözüm değildir bu fonksiyonu kullanmayın*/
mysql_real_escape_string() ve mysqli_real_escape_string()
/* Bu fonksşyon sizi sql injection'dan koruyabilir ancak bazı durumlar hariç. Mysql 4.1.x'den 4.1.20'ye kadar ve 5.0.x'ten 5.1.11'e kadar Charset'i BIG5 ve GBK  olan hepsinde bug var.  Charset'i değiştirerek bu sorunu ortadan kaldırmış olursunuz. UTF-8 Kullanmanızı öneririm. */
/* Mysql kullanmayı bırakın, mysqli yada pdo kullanmaya başlayın hem daha hızlı ve daha güvenli */
session_regenerate_id()  /* Oturum kimlik numarasını değiştirerek Session Hijacking'ten sizi korur.  */

 

Php.ini Ayarları

asp_tags = Off /* asp tag kullanımı kapatır */
session.cookie_httponly = 1 /* javascripti ile cookie session yönetimini kapatır */
session.use_only_cookies = 1
session.cookie_secure = 1
expose_php = Off /* header bilgilerinde X-Powered-By: PHP/5.4.20 gibi php versiyonunuzu gizler */
allow_url_fopen=0
allow_url_include=0 /* uzaktan dosya include kapatır */
safe_mode = on
register_globals = Off /* Örn : $_GET['sametakin'] ile gelen veriyi direkt olarak  $sametakin olarak kullanmanızı sağlar ve oldukça sakıncalıdır */
/* KAPATILACAK FONKSİYONLAR */
disable_functions =ini_set,ini_get,exec,shell_exec,passthru,system,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,proc_open,pcntl_exec,move_uploaded_file,fwrite,touch,mkdir,rmdir,readfile,touch,fopen,fwrite,fclose,fgets,feof,unlink,opendir,readdir,closedir,fread,lwrite,lclose,copy,file_put_contents,eval,str_rot13,gzinflate,phpversion,php_uname,get_current_user,getmyuid,getmygid,pclose,fgets,feof,disk_total_space,diskfreespace,get_current_user,posix_getpwuid,posix_geteuid,posix_getegid,posix_getgrgid,passthru,system,popen,pclose,fileperms,getenv,mysql_get_client_info,ex,fileowner,filegroup,filectime,fileatime,filemtime,highlight_file,chmod,pow,fileperms,fread,rename,getcwd,chdir,phpinfo,hex2bin,binhex,hex2ascii,ascii2hex,tempnam,glob,ini_restore,ftp_connect,ftp_login,ftp_close,pg_connect,pg_close,pg_query,fputs
/* KAPATILACAK CLASSLAR */
disable_classes = ZipArchive,RecursiveIteratorIterator,RecursiveDirectoryIterator,FilesystemIterator

 

.htaccess Ayarları

Options All -Indexes /* alt dizinlerinizi erişimi engeller */
Header always append X-Frame-Options SAMEORIGIN /* iframe ile sitenizin açılmasını engeller */
ServerSignature Off
<files sql.php> /* İstediğiniz sizin için özel olan dosyalara ulaşımı bu şekilde engelleyebilirsiniz */
order allow,deny
deny from all
</files>
<FilesMatch "\.(htaccess|htpasswd|ini|psd|log|sh)$">  /* Farklı formatlardaki dosyalara ulaşımı engelleyin */
Order allow, deny
Deny from all
</FilesMatch>

 

2 Comments

DROP A COMMENT

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir