Scopri l'indirizzo IP dell'utente in base al suo UID?


8

Sto gestendo il sito Web Drupal 7 con un gioco di carte multiplayer russo e devo bloccare alcuni giocatori molto fastidiosi ogni 4-5 giorni.

Prima di Drupal stavo usando phpBB 3. Quando queste persone venivano da una piccola città / villaggio aggiungerei semplicemente la loro rete IP alle regole del firewall, in modo che non possano registrarsi nuovamente con un nuovo indirizzo di posta. Nel mio caso ha funzionato bene e la mia domanda non riguarda questa politica.

Il mio problema è che con Drupal non riesco a trovare l'ultimo indirizzo IP utilizzato da un ID utente. Cioè l'abusatore mi viene segnalato da altri utenti e conosco il suo uid, ma non riesco a trovare il suo indirizzo IP nei registri, perché:

  1. Ho abilitato la registrazione syslog e vedo i messaggi Drupal in / var / log / messagess ma raramente c'è un messaggio sull'accesso di un utente, probabilmente perché le sessioni sono lunghe per impostazione predefinita e mi piacerebbe mantenerlo così per comfort dell'utente.

  2. Ho anche abilitato la "registrazione del database", ma non so dove vederlo (quale tabella del database).

Risposte:


9

Se hai abilitato il modulo statistico, la tabella "accesslog" contiene gli IP per tutti i tuoi visitatori.

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

Se non hai abilitato le statistiche, ti consiglio di lasciarlo fuori, anche per questo risultato, perché abilitarlo, causa una grave penalità di prestazione.

In tal caso, è possibile utilizzare la sessionstabella:

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

Il vantaggio del primo rispetto a quest'ultimo è che il primo ti mostrerà sempre l'ultimo nome host, mentre quest'ultimo potrebbe non essere sempre aggiornato.


È vero, anche la tabella delle sessioni ha gli indirizzi IP. Non riesco a trovare alcuni utenti anche lì. Forse è colpa mia in qualche modo. Accetterò la tua risposta e disabiliterò i moduli delle statistiche di database e syslog, perché non mi sono stati di grande utilità.
Alexander Farber,

Gli utenti che non hanno effettuato l'accesso per un po 'non avranno una sessione e non saranno trovati. Come ho affermato "quest'ultimo non sarà sempre aggiornato", nel senso che potrebbe non avere tutti gli utenti.
Berkes,

5

Per quanto ne so, Drupal non riporta l'IP utilizzato dagli utenti nel loro profilo utente. È possibile creare un modulo personalizzato, verificare l'IP utilizzato dall'utente e registrarlo nella propria tabella del database; quindi è possibile mostrarlo nel profilo utente, agli utenti che dispongono dell'autorizzazione giusta (ad esempio, agli utenti con l'autorizzazione ad amministrare gli utenti).

La funzione di cui hai bisogno è ip_address () , che puoi usare nella tua implementazione di hook_user_login () . Implementando hook_user_view () , è quindi possibile mostrare tali informazioni agli utenti con la giusta autorizzazione.


Grazie, ma poi avrò lo stesso problema che ho ora: gli utenti raramente accedono, come posso vedere nel syslog. E hook_user_login () viene chiamato solo quando un utente accede (immette la sua password).
Alexander Farber,

Puoi forzarli ad accedere; se si svuota la tabella delle sessioni, gli utenti devono accedere nuovamente.
kiamlaluno

3

Se si utilizza il modulo di registrazione del database, Drupal memorizza queste informazioni nella tabella watchdog, sotto la hostnamecolonna. Puoi scrivere query personalizzate per ottenere queste informazioni o utilizzare il modulo Views Watchdog (attualmente solo una versione dev per 7.x, quindi non sono sicuro di come funzioni in Drupal 7) per esporre quella tabella a Views.


No, la tabella del watchdog ha purtroppo lo stesso problema del modulo core syslog: per alcuni utenti non ho l'indirizzo IP, perché avevano effettuato l'accesso molto tempo fa. Quindi ricevo un rapporto su un utente malintenzionato, provo a trovare il suo IP per aggiungerlo alle mie regole di rilascio del firewall, ma non riesco a trovare il suo IP da nessuna parte.
Alexander Farber,

Sfortunatamente, l'impostazione predefinita per il watchdog è di conservare solo 1000 messaggi. Su un sito attivo, questo può durare solo un'ora o meno. A seconda del tuo sito, potresti voler aumentare il numero (admin / config / development / logging) o, in alternativa, creare una soluzione di archiviazione IP personalizzata come descritto da kiamlaluno.
jhedstrom,

1

Due moduli recenti possono aiutare con questo:

Registro IP utente , che ha l'integrazione di Views, e IP Address Manager , che non ha l'integrazione di Views ma è destinato a integrarsi con Manifest, Cave Your Trolls e Misery, tutti i moduli relativi al divieto.


-1

session_id () ti dà l'ID sessione corrente dell'utente, che sia un ospite o un membro.

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.