Плагин для ограничения регистрации пользователя на основе ip с истечением срока действия?

В отличие от большинства плагинов spammer / spambot, которые останавливают регистрацию из известного списка спама IP и доменов электронной почты, мне нужно остановить злонамеренных пользователей, которые могут попытаться зарегистрировать более одной учетной записи с одного и того же IP-адреса. Их намерения могут заключаться в том, чтобы либо преследовать людей в комментариях, как только они были запрещены на других учетных записях, либо они могут попытаться сыграть в игры с одной из моих форм подачи и представить повторяющиеся результаты, чтобы попытаться разрушить целостность вывода.

Есть ли способ, которым я могу ограничить ip-адрес от регистрации учетных записей за определенный период времени? Поскольку изменения IP-адресов меняются, я бы по-прежнему разрешал некоторым невиновным, которые могут в конечном итоге заблокировать IP-адрес, чтобы зарегистрироваться.

Несмотря на то, что этот подход может быть испорчен тем фактом, что его можно обойти с помощью прокси, вот упрощенный (но непроверенный) подход, который вам нужно будет улучшить, но даст вам основу для достижения желаемой цели.

Процесс, как я вижу:

  • регистрировать записи пользователей на pre_user_login или pre_user_nicename
  • проверить базу данных, чтобы узнать, существует ли IP в ограниченном по времени чёрном списке
  • если IP существует в пределах диапазона, отклонить регистрацию с помощью настраиваемого сообщения об ошибке
  • если IP не существует в пределах диапазона, добавьте IP в ограниченный по времени черный список
  • промыть и повторить для каждой попытки регистрации

Пример:

 function filter_user_registration_ip($user_nicename) { $ip = $_SERVER['REMOTE_ADDR']; //get current IP address $time = time(); //get current timestamp $blacklist = get_option('user_ip_blacklist') ?: array(); //get IP blacklist /* * If IP is an array key found on the resulting $blacklist array * run a differential of the * */ if ( array_key_exists($ip, $blacklist) ) { /* * Find the difference between the current timestamp and the timestamp at which * the IP was stored in the database converted into hours. */ $diff_in_hours = ($time - $blacklist[$ip]) / 60 / 60; if ( $diff_in_hours < 24 ) { /* * If the difference is less than 24 hours, block the registration attempt * and do not reset or overwrite the timestamp already stored against the * current IP address. */ wp_die('Your IP is temporarily blocked from registering an account'); } } /* * If the IP address does not exist, add it to the array of blacklisted IPs with * the current timestamp (now). * * Or if the IP address exists but is greater than 24 hours in difference between * the original stored timestamp and the current timestamp, add it to the array * of blacklisted IPs. */ $blacklist[$ip] = $time; update_option('user_ip_blacklist', $blacklist); return $user_nicename; } add_filter('pre_user_nicename', 'filter_user_registration_ip', 10, 1); 

Заметки:

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

Лучшим решением было бы не запрещать их IP из WordPress, но если у вас есть root-доступ к WHM, вы можете полностью запретить их IP-адрес со своего сервера. Это реальное решение проблемы.

Кроме того, обычно IP-адреса не меняются. Тем не менее, человек может перейти на другое интернет-соединение, прокси-сервер или какой-либо другой способ использования альтернативного IP-адреса. Тем не менее, им все равно будет больно, потому что, как только вы запретите их домашний IP, единственным реальным решением для них является заставить их интернет-провайдера изменить свой IP-адрес, из которого многие интернет-провайдеры будут неохотно делать или отказываться от запроса ,

Если у вас нет доступа к WHM или корню вашего сервера, вы все равно можете запретить их IP, добавив его в файл .htaccess следующим образом:

 order allow,deny deny from 123.45.67.89 allow from all