Salve a tutti,
ho trovato un codice simile nel bot Flood Control v.1.0 e precisamente nel file "floodcontrol.systembot.php".
E' un bug o и proprio una funzione del bot?
Vi riporto qui sotto il codice del file.
<?
error_reporting(0);
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
$_MAMBOTS->registerFunction( 'onStart', 'jeFloodTest' );
function jeFloodTest()
{
global $database;
// load mambot params info
$query = "SELECT id"
. "\n FROM #__mambots"
. "\n WHERE element = 'floodcontrol.systembot'"
. "\n AND folder = 'system'"
;
$database->setQuery( $query );
$id = $database->loadResult();
$mambot = new mosMambot( $database );
$mambot->load( $id );
$botParams = new mosParameters( $mambot->params );
$rts1 = $botParams->def( 'rulle1_times', 10 );
$rt1 = $botParams->def( 'rulle1_time', 10 );
$rts2 = $botParams->def( 'rulle2_times', FALSE );
$rt2 = $botParams->def( 'rulle2_time', FALSE );
$rts3 = $botParams->def( 'rulle3_times', FALSE );
$rt3 = $botParams->def( 'rulle3_time', FALSE );
$file_dir = getenv( "DOCUMENT_ROOT" )."/.flood/";
$nf_fip = $file_dir.getenv("REMOTE_ADDR");
$nf_fcron = $file_dir.".time";
if(!is_dir($file_dir)){ mkdir($file_dir, 0700);}
$nf_flood[$rt1]=$rts1;
if($rts2 && $rt2) $nf_flood[$rt2]=$rts2;
if($rts3 && $rt3) $nf_flood[$rt3]=$rts3;
//print_r($nf_flood);
$nf_cron_run=1200;
$nf_old_file=7200;
$nf_cron_code=cron_update($nf_fcron,$nf_cron_run);
if ($nf_cron_code==-1) return;
if ($nf_cron_code==1) {
if ($nf_dir=@opendir($file_dir)) {
$nf_time=time()-$nf_old_file;
while (($nf_tmp=readdir($nf_dir))!==false) {
if ($nf_tmp[0]==".") continue;
if (filemtime($file_dir.$nf_tmp)<$nf_time &&
preg_match("!^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$!",$nf_tmp))
{
if (!unlink($file_dir.$nf_tmp)) {
echo "Cannot delete
$nf_tmp";
}
}
}
closedir($nf_dir);
}
}
unset($nf_cron_code);
if (file_exists($nf_fip)) {
$nf_f=@fopen($nf_fip,"r+");
if (!flock($nf_f,6)) exit("Proceso parallelo disabilitato.");
if (!$nf_f) {
echo "Non aperto
".basename($nf_fip)." (r+)
";
return;
}
$nf_buf=fgets($nf_f,1000);
$nf_buf=explode("|",$nf_buf);
}
else {
for ($nf_i=0; $nf_i<count($nf_flood)*2; $nf_i++) $nf_buf[]=0;
$nf_f=@fopen($nf_fip,"a+");
if (!$nf_f) {
echo "Non creato
".basename($nf_fip)." (a+)
";
return;
}
if (!flock($nf_f,6)) exit("Proceso parallelo disabilitato.");
}
$nf_i=0;
$nf_stopflag=0;
//echo "
";print_r($nf_buf);
foreach ($nf_flood as $nf_k=>$nf_v) {
if ($nf_bu
f[$nf_i+1]+$nf_k<time()) {
$nf_buf[$nf_i]=1;
$nf_buf[$nf_i+1]=time();
}
else {
if ($nf_buf[$nf_i]>$nf_v) {
$nf_stopflag=1;
$nf_buf[$nf_i+1]=time();
}
$nf_buf[$nf_i]++;
}
$nf_i+=2;
}
ftruncate($nf_f,0);
fseek($nf_f,0);
fputs($nf_f,implode("|",$nf_buf));
//print_r($nf_buf);
if ($nf_stopflag) exit("Rilevato Flood!!");
unset($nf_f);
unset($nf_i);
unset($nf_k);
unset($nf_v);
unset($nf_stopflag);
unset($nf_buf);
unset($nf_fip);
unset($file_dir);
unset($nf_flood);
unset($nf_cron_run);
unset($nf_cron_idle);
}
function cron_update($fn,$update) {
if (!file_exists($fn)) {
if (!@touch($fn)) {
echo "не могу создать
".basename($fn).", проверьте права на файлы (w+)
";
return -1;
}
}
else {
if (time()-filemtime($fn)<$update) {return 0;}
}
$f=@fopen($fn,"r+");
if (!$f) {
echo "не могу открыть
".basename($fn).", проверьте права на файлы (r+)
";
return -1;
}
if (!flock($f,6)) {return;}
$text=fgets($f,100);
if (time()-intval($text)<$update) {return 0;}
fseek($f,0,SEEK_SET);
fwrite($f,time()." ");
fclose($f);
return 1;
}
?>