Drupal 7 - отправка уведомления при авторизации юзера с его IP-адресом

Категория: Drupal
Дата публикации: 13 октября, 2014 - 16:03
Последнее изменение: 20 ноября, 2014 - 01:08

Около года назад в рунете был всплеск активности брутфорса (перебора паролей) админок. Брутили не только джумлы, вордпрессы, но и друпалы тоже. Нельзя сказать, что до того таких попыток перебора не было - они были, но это был случай именно массовый.

У друпала от брутфорса хорошо спасает модуль Captcha. Лучше поставить математическую капчу, чтобы сберечь себе нервы :).
Для себя я еще ставлю галочку в настройках настойчивости, чтобы капча добавлялась всегда.

Еще одно хорошее средство - уведомление об авторизации. В том случае, если кто-то все-таки получит пароль, то вы по крайней мере узнаете об этом. Кроме того на почту придет его IP-адрес. Разумеется, что ситуации могут быть разные, это не спасет от всех бед, но однозначно будет плюсом.

Понадобится модуль Rules.

Далее нужно добавить следующее правило (/admin/config/workflow/rules):

Событие: Пользователь авторизовался
Действия: Отправить сообщение

Далее заполняются поля кому отправляем, тему письма.
А теперь самое интересное - как получить и отправить IP зашедшего пользователя? Это делает следующий код:

<?php
 
if (!isset($ip_address)) {
   
$ip_address = $_SERVER['REMOTE_ADDR'];

    if (

variable_get('reverse_proxy', 0)) {
     
$reverse_proxy_header = variable_get('reverse_proxy_header', 'HTTP_X_FORWARDED_FOR');
      if (!empty(
$_SERVER[$reverse_proxy_header])) {
       
// If an array of known reverse proxy IPs is provided, then trust
        // the XFF header if request really comes from one of them.
       
$reverse_proxy_addresses = variable_get('reverse_proxy_addresses', array());

       

// Turn XFF header into an array.
       
$forwarded = explode(',', $_SERVER[$reverse_proxy_header]);

       

// Trim the forwarded IPs; they may have been delimited by commas and spaces.
       
$forwarded = array_map('trim', $forwarded);

       

// Tack direct client IP onto end of forwarded array.
       
$forwarded[] = $ip_address;

       

// Eliminate all trusted IPs.
       
$untrusted = array_diff($forwarded, $reverse_proxy_addresses);

       

// The right-most IP is the most specific we can trust.
       
$ip_address = array_pop($untrusted);
      }
    }
  }

  return

$ip_address;
 
?>

Вставляем код в тему письма или в тело (может понадобиться переключиться в режим прямого ввода), сохраняем и проверяем.

Используемые материалы:

https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/ip_add...

Добавить комментарий