Security PHP Programcılarına Güvenlik Önerileri

0 Comments

PHP Programcılarına Güvenlik Tavsiyeleri

  • input validation – (Örn: intval() fonksiyonunu integer ID ile sorgulama yaptığınız PHP’lerinizde kullanabilirsiniz veya MD5() fonksiyonu ile eşleme yapabilirsiniz. Bknz: mysql_real_escape_string() )
$sql = select id, content from pages where md5(id)= '".md5($_GET["id"])."'";
  • - SQL yazarken eşlenen ifadeler için mutlaka ‘ (tek tırnak) kullanınız

Örn:

$sql = select id, content from pages where id = '".intval($_GET["id"])."'";
  • Sistem yöneticinizden PHP.INI içerisinde yer alan Magic quotes ayarını aktif hale getirmesini isteyerek gelen POST/GET isteklerinin filtrelenmesini sağlayabilirsiniz. Magic quotes aktifse tek tırnak ‘ yerine \’ olarak yorumlanacaktır.
  • Uzaktaki dosyalarla çalışmıyorsanız, sistem admininize allow_url_fopen ayarını deaktif hale getirmesini önerebilirsiniz.
  • Mysql_real_escape_string() fonksiyonu ile database uygulamanıza gelen text veriyi filtreleyebilirsiniz.
  • - Dosya yüklemeleri yaparken BÜYÜK/küçük harf ayrımı yaparak uzantı kontrolü yapmalısınız.

Örn:

if(!preg_match("/(doc|xls|txt)/",substr(strtolower($_FILES["dosyam"]["name"]),-3)) return false;
  • - Uygulamanıza dahil ederken dikkatli olunuz

Örnek;

((file_exists(str_replace(array("../","http"),array("",""),($inc_dir."".$_GET["modul"]."_".$_GET["sayfa"].".php")))) ? include(str_replace(array("../","http"),array("",""),($inc_dir."".$_GET["modul"]."_".$_GET["sayfa"].".php"))) : print '');
  • - Veritabanı destekli uygulamalarınız için global yetkili veritabanı kullanıcı yetkileri kullanmayınız.
  • – Giriş yapılması gereken uygulamlarınız için her dosyada oturum kontrolü yapınız.
  • – Çalıştığınız alan adı altında apache server Options Indexes özelliğinin aktif olmadığından emin olunuz. Eğer aktifse index olmayan dizinleriniz için dosya listesi alırsınız.
  • – Apache ile çalışıyorsanız sunucu yöneticinize mod_security kullanmasını öneriniz, (mod_security application firewall olarak bilenen, yazacağınız kurallarla uygulama seviyesinde filtreleme yapmanıza imkan tanıyan apache güvenlik modülür.)
  • – Sunucu yöneticinize kullanmıyorsa php.ini disabled functions özelliğini kullanmasını öneriniz. (disable_functions= popen,pclose,posix_getpwuid,posix_getgrgid,posix_k ill,parse_perms,phpinfo,system,dl,passthru,exec, shell_exec,popen,proc_close,proc_get_status,proc_n ice,proc_open,escapeshellcmd,escapeshellarg,show_s ource,posix_mkfifo, set_time_limit,mysql_list_dbs,get_current_user,get myuid,pconnect,link,symlink,pcntl_exec,ini_alter,p arse_ini_file,pfsockopen, leak,apache_child_terminate,posix_kill,posix_setpg id,posix_setsid,posix_setuid,proc_terminate,syslog ,fpassthru,stream_select, socket_select,socket_create,socket_create_listen,s ocket_create_pair,socket_listen,socket_accept,sock et_bind,socket_strerror, pcntl_fork,pcntl_signal,pcntl_waitpid,pcntl_wexits tatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifs topped,pcntl_wstopsig,pcntl_wtermsig,openlog,apach e_get_modules,apache_get_version,apache_getenv,apa che_note,apache_setenv,virtual)
  • – Uygulamaların (Apache/PHP/MySQL) düzenli olarak güncellediğinden güncellenmiyorsa yamaların takip edildiğinden emin olunuz

Ali Okan YÜKSEL,  2009  İzmir

Leave a Reply