*/
class php_si {
var $color = ''; // security level
// stampanje
function render() {
$table_up = '
PHP Security Info
';
$table_mid = $this->test();
return $table_up.$table_mid.$table_down;
}
// pred buffer
function pbuffer($n,$m,$c) {
switch($c) {
case "red":
$c = 'FF0000';
break;
case "yelow":
$c = 'FFCC00';
break;
case "green":
$c = '7FDF00';
break;
case "blue": // For developing
$c = '0066FF';
break;
}
$pb .= '
'.$n.' |
'.$m.' |
';
return $pb;
}
// ini konfiguracija test
function get_ini($ini_val) {
$result = ini_get($ini_val);
switch($ini_val) {
//# allow_url_fopen
case "allow_url_fopen":
if($result == 1){
$result = 'Opcija je ukljucena. Ovo je potencijalni sigurnosni propust jer omogucava
umetanje (include) remote fajlova kao da su na vasem serveru.';
$this->color = 'red';
} else {
$result = 'Opcija je iskljucena, ovo je preporuceno podesavanje.';
$this->color = 'yelow';
}
break;
//# display_errors
case "display_errors":
if($result == 1){
$result = 'Opcija je ukljucena. Iskljucite ovu opciju ili u suprotnom ostavljate
mogucnost otkrivanja vitalnih informacija o vasem sistemu.';
$this->color = 'yelow';
} else {
$result = 'Opcija je iskljucena , ovo je preporuceno podesavanje.';
$this->color = 'green';
}
break;
//# expose_php
case "expose_php":
if($result == 1){
$result = 'Opcija je ukljucena. Ova opcija dodaje PHP potpis na WEB Server Baner i
samim tim olaksava potragu potencijalnom napadacu za ranjivostima doticne verzije PHP-a.';
$this->color = 'yelow';
} else {
$result = 'Opcija je ukljucena. , ovo je preporuceno podesavanje.';
$this->color = 'green';
}
break;
//# file_uploads
case "file_uploads":
if($result == 1){
$result = 'Opcija je ukljucena. Ukoliko Vam nije potrebna ova opcija iskljucite je.';
$this->color = 'yelow';
} else {
$result = 'Opcija je ukljucena. Ovo je preporuceno podesavanje ukoliko Vam ova opcija nije potrebna.';
$this->color = 'green';
}
break;
//# magic_quotes_gpc
case "magic_quotes_gpc":
if($result == 1){
$result = 'Opcija je ukljucena. Ovo je nedovoljan nacin zastite, iskljucite opciju i implementirajte
sopstveni system zastite.';
$this->color = 'red';
} else {
$result = 'Opcija je iskljucena , ovo je preporuceno podesavanje.';
$this->color = 'green';
}
break;
//# memory_limit
case "memory_limit":
define ('NORMAL_MEMORY_LIMIT', 8*1024*1024);
if($result == ""){
$result = 'Opcija nije ukljucena. Ovim putem ostavljate server nezasticenim na napade koji
se zasnivaju na trosenju sistemskih resursa.';
$this->color = 'red';
} else if ($this->returnBytes($result) > NORMAL_MEMORY_LIMIT) {
$result = 'Opcija je postavljena na relativno visoku vrednost. Ukoliko postoji mogucnost
postavite ovu vrednost na neku optimalnu (npr: 8MB), u suprotnom ostavljate server
nezasticenim na napade koji se zasnivaju na trosenju sistemskih resursa.';
$this->color = 'yelow';
} else {
$result = 'Opcija je ukljucena, i postavljena na optimalnu vrednost.';
$this->color = 'green';
}
break;
//# open_basedir
case "open_basedir":
if($result == 1){
$result = 'Opcija je ukljucena, ovo je preporuceno podesavanje.';
$this->color = 'green';
} else {
$result = 'Opcija je iskljucena. Ovim putem dozvoljavate PHP scriptovima pristup
svim lokacijama na vasem serveru.';
$this->color = 'yelow';
}
break;
//# post_max_size
case "post_max_size":
define ('NORMAL_POST_MAXLIMIT', 1024*256);
if($this->returnBytes($result) > NORMAL_MEMORY_LIMIT || $result = ""){
$result = 'Opcija je iskljucena, ili je postavljena na veliku vrednost.
Ovim putem postajete ranjiviji na potencijalne Denial-Of-Service napade.';
$this->color = 'yelow';
} else {
$result = 'Opcija je ukljucena, i postavljena je na optimalnu vrednost.';
$this->color = 'green';
}
break;
//# register_globals
case "register_globals":
if($result == 1){
$result = 'Opcija je ukljucena. Ovo je ozbiljan sigurnosni propust, iskljuite ovu opciju.';
$this->color = 'red';
} else {
$result = 'Opcija je iskljucena , ovo je preporuceno podesavanje.';
$this->color = 'green';
}
break;
//# upload_max_filesize
case "upload_max_filesize":
define ('NORMAL_UPLOAD_MAXLIMIT', 1024*256);
if($this->returnBytes($result) < NORMAL_UPLOAD_MAXLIMIT && $result != -1) {
$result = 'Opcija je ukljucena, i postavljena je na optimalnu vrednost.';
$this->color = 'green';
} else {
$result = 'Opcija je iskljucena, ili je postavljena na veliku vrednost.
Ovim putem postajete ranjivi na napade koji se zasnivaju na trosenju sistemskih resursa.';
$this->color = 'yelow';
}
break;
//# upload_tmp_dir
case "upload_tmp_dir":
if( $result === FALSE || $result == '/tmp' || $result == '/temp' ) {
$result = 'Opcija je iskljucena, ili je postavljena na uobicajnu rec. Ovim putem omogucavate drugim
korisnicima, na istom serveru, da pristupe privremenim fajlovima drugih korisnika.
Uvek postavite ime foldera na neko koje manje asocira na isti.';
$this->color = 'yelow';
} else {
$result = 'Opcija je ukljucena, ovo je preporuceno podesavanje.
Uvek postavite ime foldera na neko koje manje asocira na isti.';
$this->color = 'green';
}
break;
//# use_trans_sid
case "use_trans_sid":
if($result == 1) {
$result = 'Opcija je ukljucena. Ovim je "session hijacking" mnogo lakse izvesti.
Iskljucite ovu opciju.';
$this->color = 'red';
} else {
$result = 'Opcija je iskljucena , ovo je preporuceno podesavanje.';
$this->color = 'green';
}
break;
}
return $result;
}
// testovi
function test() {
$pbuffer = ''; // pred bafer
$testsfini = array(
"allow_url_fopen",
"display_errors",
"expose_php",
"file_uploads",
"magic_quotes_gpc",
"memory_limit",
"open_basedir",
"post_max_size",
"register_globals",
"upload_max_filesize",
"upload_tmp_dir",
"use_trans_sid",
);
foreach ($testsfini as $key => $val) {
$pbuffer .= $this->pbuffer($val,$this->get_ini($val),$this->color);
}
return $pbuffer;
}
// memory value return bytes
// preuzeto sa http://us3.php.net/manual/en/function.ini-get.php
function returnBytes($val) {
$val = trim($val);
$last = strtolower($val{strlen($val)-1});
switch($last) {
// The 'G' modifier is available since PHP 5.1.0
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
}
// Kreiramo objekat
$SEC = new php_si();
echo $SEC->render();
?>