UID가 주어진 사용자의 IP 주소를 찾으십니까?


8

러시아 멀티 플레이어 카드 게임으로 Drupal 7 웹 사이트를 운영하고 있으며 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

통계를 사용하지 않으면이 결과에 대해서도 통계를 사용하지 않는 것이 좋습니다. 사용하도록 설정하면 성능이 저하 될 수 있습니다.

이 경우 sessionstable 을 사용할 수 있습니다 .

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

후자의 첫 번째 장점은 첫 번째의 호스트 이름이 항상 최신 호스트 이름을 표시하지만 후자가 항상 최신 상태가 아닐 수 있다는 것입니다.


사실, 세션 테이블에도 IP 주소가 있습니다. 나는 거기에서 일부 사용자를 찾을 수 없습니다. 어쩌면 그것은 내 잘못일지도 모른다. 귀하의 답변을 수락하고 syslog 및 데이터베이스 통계 모듈을 비활성화합니다.
Alexander Farber

한동안 로그인하지 않은 사용자는 세션이 없어서 찾을 수 없습니다. "후자는 항상 최신 상태가 아닐 것"이라고 말했듯이 이는 모든 사용자가있는 것은 아닙니다.
berkes

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의 dev 릴리스 만 사용하므로 Drupal 7에서 얼마나 잘 작동하는지 잘 모르겠습니다)을 사용하여 해당 테이블을 Views에 노출 할 수 있습니다.


아니, 워치 독 테이블은 불행히도 syslog 코어 모듈과 같은 문제가 있습니다. 일부 사용자에게는 오래 전에 로그인했기 때문에 IP 주소가 없습니다. 따라서 일부 악의적 인 사용자에 대한 보고서를 받고 방화벽 드롭 규칙에 추가 할 IP를 찾으려고하지만 어디에서나 자신의 IP를 찾을 수 없습니다.
Alexander Farber

안타깝게도 워치 독의 기본 설정은 1000 개의 메시지 만 유지하는 것입니다. 활성 사이트에서는 1 시간 이하 만 지속될 수 있습니다. 사이트에 따라 해당 번호를 늘리거나 (admin / config / development / logging) 또는 kiamlaluno에서 설명한대로 사용자 지정 IP 스토리지 솔루션을 구축 할 수 있습니다.
jhedstrom


-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.