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:----awGpYbUVSrnJjZFoPuTj5p9R/U2m9mNEZWSW5rnh6WcvpqXdEur4JqQ7VnKaeW5RSkZHl4RFC+z++wW+QcakvSmGRib/WkOp0Q1Ij9SmuTishxuQ2Y8p6lryH3VNX+Kx8kqzOO3hFEVTeW1GbePg6ns6kw2P5U2k1oujC2IwMrc9ZIpjVcNyvC6ArvgrsZ5j5b4F8ID3OcCkUVisN2tBShTImX/1SMekev2Cmf7uSRaIqNuC5TsTuaCpwtOmoHToEV8x78I8zM+WurY/eIfXqIPnc8zCzCAXUNV69hpLsgvpp8NUC0v+g6gBcNmgY+xlbspilAgyQG46WSn+G11anSAQgcqdsVO0a1ApcjT2wqmBm7nt/2xitbyjLMbnywsVXaHXuM93XU6zyzJ1q4YpOkDRz5WCAyoPRIR+w/R2busyNOJkzSGSRbRRpQcKo7S5C08HyTcHdsME+lGtZMtNP0+JkB+sbWjIOuKwSc4IqExVTrywS2RJsknN28pCVqqZui/s6s1Z2P5m8GtnIGQx/sfIHd+mfrp+jIUI7HJ+H0MiT+HMi9uhIqVdwt1/rTceqjOLhgBW/yTYo9S+w76iy37y99wW7GPGXgSmw3M9iYmD4Zyn1+rmqt8FS/vXRS9OZ89/VuZxlRshSfgMBrT47fA8wfHQedKY5yZw5WLLrmg=----ATTACHMENT:----MTU0NDYwMTY0MzU3MjE5NyAxODk0NzM2NjQxMTgwODk1IDM0ODc0NzkwMDAzODU4Nzg=