Дізнайтеся IP-адресу користувача з урахуванням їх UID?


8

Я запускаю веб-сайт Drupal 7 з російською багатокористувацькою картковою грою, і мені доводиться блокувати деяких дуже дратівливих гравців кожні 4-5 днів.

До Drupal я використовував phpBB 3. Коли ці люди приїхали б з невеликого міста / селища, я просто додав би їхню мережу IP до правил брандмауера, щоб вони не могли перереєструватися з новою адресою пошти. У моєму випадку це спрацювало добре, і моє питання не стосується цієї політики.

Моя проблема полягає в тому, що з Drupal я не можу знайти останню IP-адресу, використану ідентифікатором користувача. Тобто про зловмисника повідомляють мені інші користувачі, і я знаю його uid, але я не можу знайти його IP-адресу в журналах, оскільки:

  1. Я ввімкнув системний журнал і побачив повідомлення Drupal у / var / log / messages, але рідко є повідомлення про вхід користувача, можливо, тому що сеанси за замовчуванням тривають, і я хотів би зберегти це таким чином комфорт користувача.

  2. Я також увімкнув "реєстрацію баз даних", але не знаю, де її переглянути (яка таблиця бази даних).

Відповіді:


9

Якщо ввімкнено модуль статистики, таблиця «Accesslog» містить IP-адреси для всіх ваших відвідувачів.

SELECT hostname FROM accesslog WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

Якщо у вас не включена статистика, я раджу залишити її навіть для цього результату, оскільки включення її спричиняє суворий показник ефективності.

У цьому випадку ви можете використовувати sessionsтаблицю:

SELECT hostname FROM sessions WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

Перевага першого над останнім полягає в тому, що перший завжди показуватиме останнє ім’я хоста, тоді як останнє не завжди може бути оновленим.


Правда, у таблиці сеансів є і IP-адреси. Я також не можу знайти деяких користувачів там. Може, я чомусь винен. Я прийму вашу відповідь і відключу модулі статистики syslog та бази даних, тому що вони не дуже корисні для мене.
— Олександр Фарбер

Користувачі, які не входили в систему протягом певного часу, не матимуть сеансу і не знайдуться. Як я вже зазначив, "останній не завжди буде актуальним", тобто: він може мати не всіх користувачів.
— berkes

5

Наскільки мені відомо, Drupal не повідомляє про IP-адресу, яку користувачі використовують у своєму профілі користувача. Ви можете створити спеціальний модуль, перевірити IP-адресу, яку використовує користувач, і записати його у власну таблицю бази даних; тоді ви можете показати це у профілі користувача, користувачам, які мають відповідний дозвіл (наприклад, користувачам, які мають дозвіл на адміністрування користувачів).

Вам потрібна функція ip_address () , яку ви можете використовувати при реалізації вашої кнопки_user_login () . Реалізуючи прив'язку_в_переду () , ви можете показати таку інформацію користувачам з правильним дозволом.


Дякую, але тоді у мене буде та сама проблема, що і в мене зараз: користувачі рідко входять у систему, як я бачу в syslog. Причому гачка_user_login () викликається лише тоді, коли користувач входить (вводить свій пароль).
— Олександр Фарбер

Ви можете змусити їх увійти; якщо ви очистите таблицю сеансів, користувачі повинні знову увійти.
— kiamlaluno

3

Якщо ви використовуєте модуль реєстрації баз даних, Drupal зберігає цю інформацію в таблиці сторожових собак, під hostnameстовпцем. Ви можете або написати спеціальні запити, щоб отримати цю інформацію, або скористатися модулем "Watchdog Views" (наразі лише випуск розробника для 7.x, тому я не впевнений, наскільки це добре працює в Drupal 7), щоб виставити цю таблицю на Views.


Ні, таблиця сторожової служби має, на жаль, ту ж проблему, що і основний модуль syslog: для деяких користувачів у мене немає IP-адреси, оскільки вони вже давно увійшли в систему. Отож я отримую звіт про якогось шкідливого користувача, спробуйте знайти його IP, щоб додати його до моїх правил вибуху, але я не можу знайти його IP ніде.
— Олександр Фарбер

На жаль, за замовчуванням для сторожової собаки зберігається лише 1000 повідомлень. На активному сайті це може тривати лише годину або менше. Залежно від вашого веб-сайту, ви, можливо, захочете збільшити цю кількість (адміністратор / конфігурація / розробка / ведення журналів) або створити спеціальне рішення для зберігання IP, як описано kiamlaluno.
— jhedstrom

1

У цьому можуть допомогти два останні модулі:

User Log Log , який має інтеграцію Views, та менеджер IP-адрес , який не має інтеграції з представленнями даних, але призначений для інтеграції з Manifest, Cave Your Trolls та Misery.


-1

session_id () дає поточний ідентифікатор сеансу користувача, незалежно від того, чи він / вона гість або учасник.

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.