Резкий всплеск прямых заходов. Как бороться?

MI
На сайте с 18.08.2021
Offline
55
#391
Нужно с этими ботами конечно разбираться, не стоит давать им гулять по сайту. Я когда их побанил сразу позиции вверх пошли
sochi-russia
На сайте с 06.01.2012
Offline
193
#392
MihailIsmailov2021 #:
Нужно с этими ботами конечно разбираться, не стоит давать им гулять по сайту. Я когда их побанил сразу позиции вверх пошли

Как блокировали?

Telegram Чат Бот дешёвых авиабилетов https://t.me/Aviaonlinebot Супер Хостинг от 9,20 руб в день https://clck.ru/Rk2P5 🖧 VPS от 19 руб. https://clck.ru/afhGc 🖧 Выделенные СЕРВЕРЫ - БЕСПЛАТНЫЕ плюшки https://clck.ru/YhkZe 🖧 / / Хостинг от 6руб в день! https://clck.ru/Rk2P5
Л1
На сайте с 27.12.2016
Offline
175
#393

подскажите в чем ошибка:

ставлю запрет доступа к сайту по реферу

RewriteEngine on
RewriteCond %{HTTP_REFERER} binance\.com [NC]
RewriteRule .* - [F]

но почему-то для версии http сайта сервер отдает код 200 потом происходит 301 редирект на https и тут такому переходу отдается 403

Ростислав Шацкий
На сайте с 20.10.2022
Offline
13
#394
Может быть, кому-то принесет пользу мой подход к реализации на Wordpress: 🙏

1. Написал сниппет:
// Создаем функцию для записи данных посетителей
function log_visitor_info() {
    $log_file = ABSPATH . 'visitor_log.txt'; // Путь к файлу лога

    $current_date_time = date('Y-m-d H:i:s'); // Текущая дата и время
    $visitor_ip = $_SERVER['REMOTE_ADDR']; // IP-адрес посетителя
    $current_page = $_SERVER['REQUEST_URI']; // Текущая посещенная страница

    // Запись в лог
    $log_entry = "$current_date_time - IP: $visitor_ip, Page: $current_page\n";

    // Открываем файл в режиме добавления
    $file_handle = fopen($log_file, 'a');
    
    if ($file_handle) {
        fwrite($file_handle, $log_entry);
        fclose($file_handle);
    }
}

// Добавляем хук, чтобы записывать данные при каждом запросе
add_action('wp', 'log_visitor_info');
2. Отслеживание
Далее,если в метрике вижу много прямых заходов, то отслеживаю и сопоставляю с логами "visitor_log.txt", создаваемый сниппетом, в корне сайта

3. Блокирую

В файле .htaccess, в корне сайта, добавляю строки с подозрительными ip

deny from ххх.хх.хх.ххх
Z
На сайте с 12.12.2006
Offline
135
#395

Я чуть подправил, чтоб в адмике смотреть можно было

// Отслеживание
// Создаем функцию для записи данных посетителей
function log_visitor_info() {
    $log_file = ABSPATH . 'visitor_log.txt'; // Путь к файлу лога

    $current_date_time = date('Y-m-d H:i:s'); // Текущая дата и время
    $visitor_ip = $_SERVER['REMOTE_ADDR']; // IP-адрес посетителя
    $current_page = $_SERVER['REQUEST_URI']; // Текущая посещенная страница

    // Запись в лог
    $log_entry = "$current_date_time - IP: $visitor_ip, Page: $current_page\n";

    // Открываем файл в режиме добавления
    $file_handle = fopen($log_file, 'a');
    
    if ($file_handle) {
        fwrite($file_handle, $log_entry);
        fclose($file_handle);
    }
}

// Добавляем хук, чтобы записывать данные при каждом запросе
add_action('wp', 'log_visitor_info');

// Создаем страницу в меню "Инструменты"
function custom_logs_page() {
    add_submenu_page(
        'tools.php',
        'Лог посещений',
        'Лог посещений',
        'manage_options',
        'visitor-log',
        'render_visitor_log_page'
    );
}
add_action('admin_menu', 'custom_logs_page');

// Функция для вывода таблицы лога на странице
function render_visitor_log_page() {
    // Получаем данные из файла лога
    $log_file = ABSPATH . 'visitor_log.txt';
    $log_content = file_get_contents($log_file);
    
    // Разбиваем записи по строкам
    $log_entries = explode("\n", $log_content);

    // Выводим страницу админки
    echo '<div class="wrap">';
    echo '<h2>Лог посещений</h2>';
    
    // Загружаем стили WordPress для таблиц
    wp_enqueue_style('wp-admin');
    
    // Выводим таблицу с данными
    echo '<table class="widefat">';
    echo '<thead><tr><th>Дата и время</th><th>IP-адрес</th><th>Посещенная страница</th></tr></thead>';
    echo '<tbody>';
    foreach ($log_entries as $entry) {
        if (!empty($entry)) {
            preg_match('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - IP: ([\d.]+), Page: (.+)/', $entry, $matches);
            if (count($matches) === 4) {
                list(, $date_time, $ip, $page) = $matches;
                echo "<tr><td>$date_time</td><td>$ip</td><td>$page</td></tr>";
            }
        }
    }
    echo '</tbody>';
    echo '</table>';

    // Добавляем кнопку очистки лога
    echo '<form method="post">';
    echo '<p><input type="submit" name="clear_log" class="button button-primary" value="Очистить лог"></p>';
    echo '</form>';

    if (isset($_POST['clear_log'])) {
        clear_visitor_log();
        echo '<div class="updated"><p>Лог посещений очищен.</p></div>';
    }
    
    echo '</div>'; // Закрываем div.wrap
}


// Функция для очистки лога
function clear_visitor_log() {
    $log_file = ABSPATH . 'visitor_log.txt';
    
    // Открываем файл в режиме записи и обрезаем его до нулевой длины
    $file_handle = fopen($log_file, 'w');
    if ($file_handle) {
        fclose($file_handle);
    }
}
dglazkov.ru
Анти БОТ
На сайте с 14.03.2020
Offline
128
#396
Ростислав Шацкий #:
Может быть, кому-то принесет пользу мой подход к реализации на Wordpress: 🙏

1. Написал сниппет:
2. Отслеживание
Далее,если в метрике вижу много прямых заходов, то отслеживаю и сопоставляю с логами "visitor_log.txt", создаваемый сниппетом, в корне сайта

3. Блокирую

В файле .htaccess, в корне сайта, добавляю строки с подозрительными ip

Интересное решение. А как это поможет если в ботосетке много айпишников и каждый заход - с нового?

Защита сайта от поведенческих ботов, настройка АнтиБот систем, фильтрация ботов для Яндекс Директ - https://antibot24.ru
M
На сайте с 17.08.2023
Offline
11
#397
zorky #:

Я чуть подправил, чтоб в адмике смотреть можно было

Спасибо за идею. Сделал. Удобно и полезно.

Только у себя поменял время на мое местное и добавил еще реферер и браузер 

    $current_date_time = date('Y-m-d H:i:s', strtotime('+3 hours')); // Текущая дата и московское время
    $visitor_referer = $_SERVER['HTTP_REFERER']; // Реферер
    $visitor_browser = $_SERVER['HTTP_USER_AGENT']; // Браузер

И в строке

preg_match('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - IP: ([\d.]+), Page: (.+)/', $entry, $matches);

помимо добавлений реферера и браузера  поменял IP: ([\d.]+)  на IP: (.+) чтобы видеть еще и адреса  IPv6

Ростислав Шацкий
На сайте с 20.10.2022
Offline
13
#398
zorky #:

Я чуть подправил, чтоб в адмике смотреть можно было

Matatum #:

Спасибо за идею. Сделал. Удобно и полезно.

Только у себя поменял время на мое местное и добавил еще реферер и браузер 

И в строке

помимо добавлений реферера и браузера  поменял IP: ([\d.]+)  на IP: (.+) чтобы видеть еще и адреса  IPv6

Круто мужики! 🔥 Объединил и добавил вывод  второй таблицы в панельке "лог посещений", которая считает и показывает количество визитов на уникальный ip:

// Отслеживание
// Создаем функцию для записи данных посетителей
function log_visitor_info() {
    $log_file = ABSPATH . 'visitor_log.txt'; // Путь к файлу лога

    $current_date_time = date('Y-m-d H:i:s'); // Текущая дата и время
    $visitor_ip = $_SERVER['REMOTE_ADDR']; // IP-адрес посетителя
    $current_page = $_SERVER['REQUEST_URI']; // Текущая посещенная страница

    // Запись в лог
    $log_entry = "$current_date_time - IP: $visitor_ip, Page: $current_page\n";

    // Открываем файл в режиме добавления
    $file_handle = fopen($log_file, 'a');
    
    if ($file_handle) {
        fwrite($file_handle, $log_entry);
        fclose($file_handle);
    }
}
// Добавляем хук, чтобы записывать данные при каждом запросе
add_action('wp', 'log_visitor_info');

// Создаем страницу в меню "Инструменты"
function custom_logs_page() {
    add_submenu_page(
        'tools.php',
        'Лог посещений',
        'Лог посещений',
        'manage_options',
        'visitor-log',
        'render_visitor_log_page'
    );
}
add_action('admin_menu', 'custom_logs_page');

// Функция для подсчета уникальных IP и их повторений
function count_unique_ips($log_entries) {
    $ip_counts = [];

    foreach ($log_entries as $entry) {
        if (!empty($entry)) {
            preg_match('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - IP: (.+), Page: (.+)/', $entry, $matches);
            if (count($matches) === 4) {
                $ip = $matches[2];
                if (isset($ip_counts[$ip])) {
                    $ip_counts[$ip]++;
                } else {
                    $ip_counts[$ip] = 1;
                }
            }
        }
    }

    return $ip_counts;
}

// Функция для вывода таблицы лога на странице
function render_visitor_log_page() {
    // Получаем данные из файла лога
    $log_file = ABSPATH . 'visitor_log.txt';
    $log_content = file_get_contents($log_file);
    
    // Разбиваем записи по строкам
    $log_entries = explode("\n", $log_content);

    // Выводим страницу админки
    echo '<div class="wrap">';
    echo '<h2>Лог посещений</h2>';
    
    // Загружаем стили WordPress для таблиц
    wp_enqueue_style('wp-admin');
    
    // Выводим таблицу с данными + IPv6
    echo '<table class="widefat">';
    echo '<thead><tr><th>Дата и время</th><th>IP-адрес</th><th>Посещенная страница</th></tr></thead>';
    echo '<tbody>';
    foreach ($log_entries as $entry) {
        if (!empty($entry)) {
            preg_match('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - IP: (.+), Page: (.+)/', $entry, $matches);
            if (count($matches) === 4) {
                list(, $date_time, $ip, $page) = $matches;
                echo "<tr><td>$date_time</td><td>$ip</td><td>$page</td></tr>";
            }
        }
    }
    echo '</tbody>';
    echo '</table>';

    // Выводим таблицу с уникальными IP
    $unique_ips = count_unique_ips($log_entries);

    echo '<h3>Уникальные IP-адреса</h3>';
    echo '<table class="widefat">';
    echo '<thead><tr><th>IP-адрес</th><th>Количество визитов</th></tr></thead>';
    echo '<tbody>';
    foreach ($unique_ips as $ip => $count) {
        echo "<tr><td>$ip</td><td>$count</td></tr>";
    }
    echo '</tbody>';
    echo '</table>';

    // Добавляем кнопку очистки лога
    echo '<form method="post">';
    echo '<p><input type="submit" name="clear_log" class="button button-primary" value="Очистить лог"></p>';
    echo '</form>';

    if (isset($_POST['clear_log'])) {
        clear_visitor_log();
        echo '<div class="updated"><p>Лог посещений очищен.</p></div>';
    }
    
    echo '</div>'; // Закрываем div.wrap
}

// Функция для очистки лога
function clear_visitor_log() {
    $log_file = ABSPATH . 'visitor_log.txt';
    
    // Открываем файл в режиме записи и обрезаем его до нулевой длины
    $file_handle = fopen($log_file, 'w');
    if ($file_handle) {
        fclose($file_handle);
    }
}

Проще стало вычислять 😁

Ростислав Шацкий
На сайте с 20.10.2022
Offline
13
#399
Теперь давайте допилим, чтобы вычислялись паттерны поведения ботов и автоматом дописывались строки deny from ххх.хх.хх.ххх в  .htaccess 😂
Ростислав Шацкий
На сайте с 20.10.2022
Offline
13
#400
GuruSite24 #:

Интересное решение. А как это поможет если в ботосетке много айпишников и каждый заход - с нового?

Доброго дня. Вижу по Вашему сайту, что Вы коммерциализируете свои навыки  защиты сайтов от ботов. Так же благодарю, за "наводку" в теме. Объективно, не все случаи требуют сверх-решения. Есть локальные(региональные) продукты, которым боты докучают не так сильно... и в таком случае, как и в моем, такое решение помогает решить вопрос. Если проект крупный, то и ресурсы, в теории, позволят решать вопросы на другом уровне. Для всех остальных, полагаю, будет достаточно и "коленочного" решения 😉

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий