View file system/connections/cheader/data/antiddos.php

File size: 3.34Kb
<?php
  
if (config('ANTIDDOS_ACCESS') == 1) {
  
  $limit_requests = 4;
  
  if (config('ANTIDDOS_MODE') == 2) {
    
    $limit_requests = 3;
    
  }
  
  if (config('ANTIDDOS_MODE') == 3) {
    
    $limit_requests = 2;
    
  }
  
  $window_time = 1;
  $sanitized_ip = preg_replace('/\D/', '', IP);
  $block_file = ROOT.'/files/upload/antiddos/block_status_'.$sanitized_ip.'.json';
  $now = microtime(true);
  $captcha_random_seed = "152639487";
  
  if (!file_exists($block_file)) {
    
    @file_put_contents($block_file, json_encode(['blocked' => false, 'requests' => []]));
  
  }
  
  $data = json_decode(@file_get_contents($block_file), true);
  
  if ($_SERVER['REQUEST_METHOD'] === 'POST' && post('unblock')) {
    
    if (!post('captcha') or !post('captcha_key')) {
      
      redirect(REQUEST_URI);
    
    }
    
    if (md5((int)post('captcha') + $captcha_random_seed) != post('captcha_key')) {
      
      redirect(REQUEST_URI);
    
    }
    
    $data['blocked'] = false;
    $data['requests'] = [];
    @file_put_contents($block_file, json_encode($data));
    
    if (config('ANTIDDOS_LOGS') == 1) {
      
      db::get_add("INSERT INTO `ANTIDDOS` (`BROWSER`, `IP`, `TIME`, `LINK`, `STATUS`) VALUES (?, ?, ?, ?, ?)", [BROWSER, IP, TM, REQUEST_URI, 2]);
    
    }
    
    redirect(REQUEST_URI);
  
  }
  
  if ($data['blocked']) {
    
    $blocked = true;
  
  } else {
    
    $requests = array_filter($data['requests'], function($timestamp) use ($now, $window_time) {
      
      return ($now - $timestamp) < $window_time;
    
    });
    
    $requests[] = $now;
    
    if (count($requests) > $limit_requests) {
      
      $data['blocked'] = true;
      $data['requests'] = $requests;
      @file_put_contents($block_file, json_encode($data));
      $blocked = true;
      
      if (config('ANTIDDOS_LOGS') == 1) {
        
        db::get_add("INSERT INTO `ANTIDDOS` (`BROWSER`, `IP`, `TIME`, `LINK`, `STATUS`) VALUES (?, ?, ?, ?, ?)", [BROWSER, IP, TM, REQUEST_URI, 1]);
        
      }
    
    } else {
      
      $data['requests'] = $requests;
      @file_put_contents($block_file, json_encode($data));
      $blocked = false;
    
    }
  
  }

  ?>
  <?php if ($blocked): ?>
  <style>
  .antiddos_block_container { color: black; margin: auto; font-family: Arial, sans-serif; text-align: center; padding: 30px; box-sizing: border-box; background: #fff; border-radius: 15px; box-shadow: 0 0 10px rgba(0,0,0,0.2); width: 100%; max-width: 600px; margin-top: 20px; }
  .antiddos_block_button { border-radius: 10px; color: white; background: #2B3335; border: none; padding: 10px 20px; font-size: 16px; cursor: pointer; }
  </style>
  <div class="antiddos_block_container">
  <h1><?=lg('Докажите, что вы не робот')?></h1>
  <h2 style='color: #929EA1; font-size: 14px; font-weight: normal;'><?=lg('Зафиксирована подозрительная активность с вашего IP адреса')?> <b><?=IP?></b></h2>
  <p><?=lg('Для продолжения использования сайта введите код ниже и нажмите "Разблокировать доступ"')?>.</p>
  <form method="post">
  <?=html::captcha('Введите числа')?>
  <?=html::button('antiddos_block_button', 'unblock', null, 'Разблокировать доступ')?>
  </form>
  </div>
  <?php exit ?>
  <?php endif ?>
  <?
    
}