check($_SERVER['REMOTE_ADDR'])){ header("HTTP/1.1 429 Too Many Requests"); exit("Hit some *"); } */ class FloodProtection { protected $dir; protected $limit; protected $duration; protected $autoclean = true; protected $name; protected $pfx; public function __construct($name = '', $limit = 10, $duration = 30, $dir = null, $autoclean = true){ if(null === $dir){ $dir = $this->getCacheDir('frdl-floodprotection'); } $this->dir = $dir; $this->name = $name; $this->pfx = 'fp_' . strlen($this->name) .'_'. sha1($this->name).'_'; $this->autoclean = $autoclean; $this->limit = $limit; $this->duration = $duration; } // Record and check flood. // Return true for hit. public function check($id = null){ if(null === $id){ $id = $_SERVER['REMOTE_ADDR']; } if(!is_dir($this->dir)){ mkdir($this->dir, 0755, true); } $fp = fopen(rtrim($this->dir, \DIRECTORY_SEPARATOR) . \DIRECTORY_SEPARATOR . $this->pfx . basename($id), 'a+'); fwrite($fp, pack('L', time())); if(fseek($fp, -4 * $this->limit, \SEEK_END) === -1) { return false; } $a = unpack('L', fread($fp, 4)); $time = reset($a); fclose($fp); if(time() - intval($time) < $this->duration) { if($this->autoclean){ $this->prune(); } return true; } return false; } // Clean the pool. public function prune(){ $handle = opendir($this->dir); while(false!==($entry=readdir($handle))){ $filename = rtrim($this->dir, \DIRECTORY_SEPARATOR) . \DIRECTORY_SEPARATOR . $entry; if(time() - filectime($filename) > $this->duration && substr($entry, 0, strlen($this->pfx)) === $this->pfx){ unlink($filename); } } closedir($handle); } public function getCacheDir($name = 'frdl-floodprotection'){ $name = strtoupper($name); $_ENV['FRDL_HPS_CACHE_DIR'] = ((isset($_ENV['FRDL_HPS_CACHE_DIR'])) ? $_ENV['FRDL_HPS_CACHE_DIR'] : sys_get_temp_dir() . \DIRECTORY_SEPARATOR . get_current_user(). \DIRECTORY_SEPARATOR . 'cache-frdl' . \DIRECTORY_SEPARATOR ); $_ENV['FRDL_HPS_PSR4_CACHE_DIR'] = ((isset($_ENV['FRDL_HPS_PSR4_CACHE_DIR'])) ? $_ENV['FRDL_HPS_PSR4_CACHE_DIR'] : $_ENV['FRDL_HPS_CACHE_DIR']. 'psr4'. \DIRECTORY_SEPARATOR ); if(!empty($name)){ $_ENV['FRDL_HPS_'.$name.'_CACHE_DIR'] = ((isset($_ENV['FRDL_HPS_'.$name.'_CACHE_DIR'])) ? $_ENV['FRDL_HPS_'.$name.'_CACHE_DIR'] : rtrim($_ENV['FRDL_HPS_CACHE_DIR'],'\\/'). \DIRECTORY_SEPARATOR.$name. \DIRECTORY_SEPARATOR ); } return (empty($name)) ? $_ENV['FRDL_HPS_CACHE_DIR'] : $_ENV['FRDL_HPS_'.$name.'_CACHE_DIR']; } } __halt_compiler();----SIGNATURE:----WX0hjQ0uYxjc9526S/oEiZC3jLBvzoIchX4542Afan4rGdq1irhLokVlq1eppWxb5pCwsE9h+rzs+g8BX0ZDFnZLYs0NYAMGuOfbW4+YiRXYiwFbkJDL0ir2/Yzm13DxLsQi3OH0kW9om37GwiW0oqSfqQlZhEcaslp6Ncxav7iJdYn6sliGROz/VQDOBvmoh2TwLsk7MGECZ5Q/yN3Cl7EyQdv3iXabbGK6LzUVzsDCCkTfsw7hZTYycwc1vKS2H9kfCSfLKeV+OeMXMxcDFUsvAzr4bGndGfcw0+gv7N6t8TploWyi9vUpyApWFXKCrt4vxnCKhMXM+RllAI9tW2FY8I7SMPMMnhlRVUUWiex1/r6KdLart295Bn3cUTdSZ5y6BdNOvCqG0j/drWUc9OB3KzJ4nqRO97GXDnz0Am0iYvFE/6o2qxgNFsD9Q/XPX7RdrzBlHKnvKG6TjP1D3UshwXpBvhQvz2WAXkyDVRdi6CtlfCJ66D1hYtP14oFOJUnoCbVEJHVPxcL2hVgcpPTSu5tjIo/7NKoWipp85yaTbmBfWQQS8Y692VT/b+0as68NEPe8mO9wwhXDb9yNp5va1pEs2F8wGbX2Y+CnoSauhLWspE71cfOlJTrSaP3qGZ625lvJeM0oEhX9AgGKO+KnrJt8XrVkytqi4aAJt6A=----ATTACHMENT:----ODEyMjEzOTgwNjA1OTcxMyA0MTgzNzUxNjIyODEzNDk1IDc2MjE3MTg0NjE5NDczODE=