Дізнайтеся 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.