Непоследовательность в зарегистрированных отпечатках пальцев (борьба со злоупотреблениями/мошенничеством) в WordpressPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Непоследовательность в зарегистрированных отпечатках пальцев (борьба со злоупотреблениями/мошенничеством) в Wordpress

Сообщение Anonymous »

Я работаю над сайтом WordPress с BuddyPress, темой BuddyX Pro и плагином Wise Chat Pro. Недавно я занимался борьбой со злоупотреблениями на странице группового чата, где пользователи часто обходят баны по IP-адресу с помощью TOR или VPN. Чтобы повысить безопасность, я написал собственный плагин, который выполняет следующие функции:
Функционал плагина:
  • Поиск IP-адреса: плагин использует MaxMind для проверки местоположения IP-адреса пользователя и определения, является ли это известным прокси-сервером или VPN. При желании он также может запросить API ProxyCheck.io (в настоящее время отключен).
  • Снятие отпечатков пальцев устройства: для каждого уникального устройства генерируется набор отпечатков пальцев (оба расширенных — на основе серверных данных). и данные на стороне клиента — и резервный вариант, используя только данные на стороне сервера). Примечание. Я знаю, что это не на 100 % надежно, но в моем случае я бы хотел использовать его в качестве дополнительного ресурса.
  • Бот Белый список: известные боты (например, Google, Microsoft) занесены в белый список, и им всегда разрешен вход.
  • Условные правила: IP-адреса из определенных стран (например, Китая, России) блокируются, а пользователи перенаправляются. к другая страница.
Как это работает:
  • Блокировка IP-адресов: IP-адреса, не соответствующие условиям (например, географическому местоположению, статусу VPN), перенаправляются правильно.
  • Генерация отпечатков пальцев: генерируются два набора отпечатков пальцев (расширенный и резервный). , хешируется и сохраняется в защищенном файле JSON за 5 дней до удаляется.
  • Блокировка отпечатков пальцев: я добавил функцию ручной блокировки определенных отпечатков пальцев в крайнем случае. Это работает так, как задумано, но я столкнулся с проблемой, когда отпечаток пальца, созданный и проверенный по черному списку, не соответствует отпечатку, записанному в файл JSON.

    Проблема:
    Я создаю набор из двух отпечатков пальцев (расширенный и резервный):

    Код: Выделить всё

    function generate_fingerprint() {
    $fallback = generate_fallback_fingerprint();
    $advanced = generate_advanced_fingerprint();
    $combined = md5($fallback . $advanced);
    $reliability = calculate_reliability_score();
    
    return [
    'fallback_fingerprint' => $fallback,
    'advanced_fingerprint' => $combined,
    'reliability_score' => $reliability
    ];
    }
    
    Этот набор отпечатков пальцев сохраняется в файле журнала Fingerprints.json:

    Код: Выделить всё

    function save_fingerprint($ip, $fingerprint_data) {
    $data = [];
    if (file_exists(FINGERPRINT_FILE)) {
    $data = json_decode(file_get_contents(FINGERPRINT_FILE), true) ?? [];
    }
    $timestamp = time();
    $key = $ip . '_' . $timestamp;
    $data[$key] = [
    'ip' => $ip,
    'fallback_fingerprint' => $fingerprint_data['fallback_fingerprint'],
    'advanced_fingerprint' => $fingerprint_data['advanced_fingerprint'],
    'reliability_score' => $fingerprint_data['reliability_score'],
    'timestamp' => $timestamp,
    // 'client_data' => $_POST  // Only enabled when needed for debugging
    ];
    file_put_contents(FINGERPRINT_FILE, json_encode($data, JSON_PRETTY_PRINT));
    }
    
    Когда пользователь вернется, я ожидаю, что тот же отпечаток пальца (расширенный или резервный), который сгенерирован и зарегистрирован в файле Fingerprints.json, будет распознан и сохранен в черном списке (blocked_fingerprints. json), приведет к тому, что пользователь будет перенаправлен, как и ожидалось (в случае заблокированного отпечатка пальца).

    Код: Выделить всё

       $blocked_fingerprints = get_blocked_fingerprints();
    if (in_array($fingerprint_data['fallback_fingerprint'], $blocked_fingerprints)) {
    wp_safe_redirect($redirect_url);
    exit;
    }
    if (in_array($fingerprint_data['advanced_fingerprint'], $blocked_fingerprints)) {
    wp_safe_redirect($redirect_url);
    exit;
    }
    
    Однако этого не происходит.
    Сгенерированные и проверенные по черному списку отпечатки пальцев не соответствуют написанному в файл JSON.
    Я попытался посмотреть, какие отпечатки пальцев проверяются по черному списку, добавив их в свой журнал ошибок:

    Код: Выделить всё

    $fingerprint_data = generate_fingerprint();

    Код: Выделить всё

    save_fingerprint($fingerprint_data);

    Код: Выделить всё

    error_log("Fingerprint saved for IP: $ip");
    В журнале ошибок показан набор отпечатков пальцев, отличный от того, который записан в файле Fingerprints.json. Это говорит о том, что существует какое-то несоответствие в том, как генерируется отпечаток пальца при проверке черного списка. Даже для серверного (резервного) отпечатка, который всегда должен быть идентичным. Итак, похоже, что отпечатки пальцев вычисляются и/или хэшируются по-другому, и я не могу понять, как и почему. Я понятия не имею, в чем разница между обеими ситуациями.
    Мои файлы полного кода (для проверки) находятся здесь:
    https://pastebin.com/u/flower88 /1/JUEMKr6z

    Пароль к файлам: G3F80fhczm
    Моя настройка:
    < ул>
  • /wp-content/plugins/pluginname/block-anonymous.php
  • /wp-content/plugins/pluginname/fingerprint.js (загружается в заголовок страницы)< /li>
    Фрагмент выполняется через плагин WPCode в заголовке конкретной страницы.
Что работает :
  • IP-адреса, не соответствующие критериям, перенаправляются правильно.
  • Боты, внесенные в белый список, разрешены, как и ожидалось.
  • Два набора отпечатки пальцев (расширенные и резервные) генерируются и сохраняются в файле JSON правильно. Примечание. Эти отпечатки пальцев остаются идентичными, стабильными и постоянными в течение нескольких сеансов и дней и уникальны для каждого устройства.
  • Старые отпечатки пальцев удаляются через 5 дней.Примечание. Эти отпечатки пальцев остаются идентичными, стабильными и постоянными в течение нескольких сеансов и дней и уникальны для каждого устройства.
  • Старые отпечатки пальцев удаляются через 5 дней.Примечание. li>
    Блокировка определенных отпечатков пальцев работает, но сравнение отпечатков пальцев непоследовательно.
Что я пробовал:< /strong>
  • Ведение журнала показывает мне, что сгенерированные отпечатки пальцев, которые проверяются по заблокированным отпечаткам пальцев, не совпадают как для расширенных, так и для резервных отпечатков пальцев.
  • Приостановите PHP-файл с помощью Sleep() перед добавлением блока, чтобы дать на сайте достаточно времени, чтобы сгенерировать правильный отпечаток пальца (не сработало)
  • Я потратил 4 дня на устранение этой проблемы и даже обратился за помощью к ChatGPT, но пока не нашел решения . Тут я даже сомневаюсь, правильно ли я понимаю суть вопроса. ChatGPT не помог, так как я снова и снова ходил по кругу.
  • У меня закончились идеи, и я был бы очень признателен за любые идеи или предложения по устранению несоответствия отпечатков пальцев с помощью чистой, свежий, человеческий взгляд на это.
Заранее большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... -wordpress
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»