UIDを指定してユーザーのIPアドレスを調べますか?


8

私はロシアのマルチプレイヤーカードゲームでDrupal 7 Webサイトを実行しており、非常に迷惑なプレイヤーを4〜5日ごとにブロックする必要があります。

Drupalの前はphpBB 3を使用していました。これらの人々が小さな町や村から来た場合は、IPネットワークをファイアウォールルールに追加して、新しいメールアドレスで再登録できないようにしました。これは私の場合うまくいきました、そして私の質問はこの方針についてではありません。

私の問題は、Drupalでは、ユーザーIDが使用した最後のIPアドレスが見つからないことです。つまり、虐待者は他のユーザーから私に報告され、私は彼のuidを知っていますが、次の理由により、ログで彼のIPアドレスを見つけることができません。

  1. syslog-loggingを有効にして、/ var / log / messagessにDrupalメッセージを表示しましたが、ユーザーのログインに関するメッセージはめったにありません。おそらくセッションがデフォルトで長いためです。ユーザーの快適さ。

  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とデータベース統計モジュールを無効にします。なぜなら、それらは私にとってあまり役に立たなかったからです。
Alexander Farber

しばらくログインしていなかったユーザーはセッションを持っていないため、見つかりません。「後者は常に最新であるとは限らない」と述べたように、つまり、すべてのユーザーがいない可能性があります。
11年

5

私の知る限り、Drupalはユーザーが使用するIPをユーザープロファイルで報告しません。カスタムモジュールを作成し、ユーザーが使用するIPを確認して、独自のデータベーステーブルに記録できます。次に、ユーザープロファイルで、適切な権限を持つユーザー(たとえば、ユーザーを管理する権限を持つユーザー)に表示できます。

必要な関数はip_address()で、これはhook_user_login()の実装で使用できます。hook_user_view()を実装すると、適切な権限を持つユーザーにそのような情報を表示できます。


ありがとうございましたが、私と同じ問題が発生します。syslogで確認できるように、ユーザーがめったにログインしないのです。また、hook_user_login()は、ユーザーがログインする(パスワードを入力する)ときにのみ呼び出されます。
Alexander Farber

ログインを強制することができます。セッションテーブルを空にした場合、ユーザーは再度ログインする必要があります。
kiamlaluno

3

データベースロギングモジュールを使用している場合、Drupalはこの情報をhostname列の下のウォッチドッグテーブルに保存します。カスタムクエリを記述してこの情報を取得するか、Views Watchdogモジュール(現時点では7.xの開発リリースのみであるため、Drupal 7でどのように機能するかわかりません)を使用して、テーブルをビューに公開できます。


いいえ、ウォッチドッグテーブルには、残念ながらsyslogコアモジュールと同じ問題があります。一部のユーザーは、以前にログインしていたため、IPアドレスを持っていません。悪意のあるユーザーに関するレポートを受け取ったので、彼のIPを見つけてファイアウォールのドロップルールに追加しようとしましたが、どこにも彼のIPが見つかりません。
Alexander Farber

ウォッチドッグのデフォルト設定では、残念ながら、1000メッセージしか保持されません。アクティブなサイトでは、これは1時間以下しか続かない場合があります。サイトによっては、その数を増やすか(admin / config / development / logging)、またはkiamlalunoで説明されているカスタムIPストレージソリューションを構築することもできます。
jhedstrom 2011年


-1

session_id()は、ゲストかメンバーかを問わず、現在のユーザーセッションIDを提供します。

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.