Вот такое коротенькое решение реализовал, если кому интересно: global $post; $IP = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_CLIENT_IP'])) { $IP = $_SERVER['HTTP_CLIENT_IP']; } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; }; $IP = preg_replace('/[^0-9a-zA-Z\.\:]/', '', $IP); // инициализируем массив запросов $requests = array(); // загружаем лог для IP в массив $file_name = '/xxx/logs/IP/'.$IP.'.log'; $file_name_blocked = '/xxx/logs/IP/'.$IP.'.blocked'; if (@file_exists($file_name_blocked)) { header("Location: /403.php"); die(); }; $result = @file_get_contents($file_name); if ($result != FALSE) { $lines = explode(PHP_EOL, $result); $i = 0; while ($i < (count($lines)-1)) { $requests[] = array( 'date' => str_ireplace('DATE: ', '', $lines[$i]), 'URL' => str_ireplace('URL: ', '', $lines[$i+1]), 'postID' => str_ireplace('ID: ', '', $lines[$i+2]), ); $i = $i+3; }; }; // добавляем в массив новый запрос $requests[] = array( 'date' => date('Y-m-d H:i:s'), 'URL' => $_SERVER['REQUEST_URI'], 'postID' => $post->ID, ); // записываем массив в лог $file = @fopen($file_name, 'w'); if ($file != FALSE) { foreach($requests as $r) @fwrite($file, 'DATE: '.$r['date'].PHP_EOL.'URL: '.$r['URL'].PHP_EOL.'ID: '.$r['postID'].PHP_EOL); @fclose($file); }; // Анализируем и блокируем // Правило 1: обращение к advanced-search (ID=84889) три раза подряд с интервалом менее 5 секунд for($i=0;$i<count($requests);$i++) { $found = FALSE; if ($i >= 2) { if ($requests[$i-2]['postID'] == 84889 && $requests[$i-1]['postID'] == 84889 && $requests[$i]['postID'] == 84889) $found = TRUE; }; if ($found) { $time1 = $requests[$i-2]['date']; $time2 = $requests[$i-1]['date']; $time3 = $requests[$i]['date']; $diff_21 = strtotime($time2) - strtotime($time1); $diff_32 = strtotime($time3) - strtotime($time2); if ($diff_21 < 5 && $diff_32 < 5) @rename($file_name, $file_name_blocked); }; };
Еще и вот этих в брандмауэре пришлось забанить сразу диапазонами, ибо тоже с них лезли и качали чуть ли не весь сайт, создавая нагрузку на процессор:
34.*.*.* - Google Cloud35.*.*.* - Google Cloud132.145.*.* - Oracle Public Cloud140.238.*.* - Oracle Public Cloud152.67.*.* - Oracle Public Cloud47.128.*.* - Amazon Data Services Singapore47.129.*.* - Amazon Data Services Singapore47.130.*.* - Amazon Data Services Singapore47.131.*.* - Amazon Data Services Singapore47.235.*.* - Alibaba Cloud47.236.*.* - Alibaba Cloud47.237.*.* - Alibaba Cloud47.238.*.* - Alibaba Cloud47.239.*.* - Alibaba Cloud47.240.*.* - Alibaba Cloud47.241.*.* - Alibaba Cloud47.242.*.* - Alibaba Cloud47.243.*.* - Alibaba Cloud47.244.*.* - Alibaba Cloud47.245.*.* - Alibaba Cloud47.246.*.* - Alibaba Cloud
видимо хорошо вы инфу на сайте собрали, раз люди так стараются.
все же очень хотелось накормить бы его леваком)
У меня на сайте в базе более 5000 страниц с информацией об изделиях.
Еще и боты официальные всякие лезут (не вредоносные которые) и много запрашивают страниц, но от них я избавился:RewriteEngine OnRewriteCond %{HTTP_USER_AGENT} ^.*(Custom-AsyncHttpClient|ZoominfoBot|SurdotlyBot|AwarioBot|Go-http-client|ias_crawler|IABot|Amazonbot|AmazonAdBot|HeadlessChrome|GPTBot|ChatGLM-Spider|MJ12bot|OAI-SearchBot|SeznamBot|CriteoBot|ias-ie|ias-jp|ias-or|ias-va|AhrefsBot|BLEXBot|SemrushBot|DotBot).*$ [NC]RewriteRule .* - [F,L]
я бы не запрещал парсинг, а подсовывал боту левак. но не отличимый внешне.
тк еще не было проектов откуда парсинг бы запретили на 100процентов. да усложнить и сделать парсинг дороже можно, но если на сайте есть инфа без пароля - ее заберут. будет сложно - закажут у школоты ручной парсинг и все.
ищите другие закономерности помимо юзер-агента и ip.
Тут советуют капчу - ставьте не для всех, а после например, 50 просмотров разных страниц за час с одного ip. Потом еще 50.
Я думаю, что это бесплатный контент, раз уж там характеристика изделий.
Это целевой сбор, я это знаю достоверно.
Вам бурж трафик нужен? Парсят с зарубежный проксей.
========================У меня англоязычный сайт.