Как отключить возможность входа в систему?

14 нояб. 2015 г., 18:36:58
Просмотры: 14.4K
Голосов: 5

Во время масштабной брутфорс-атаки я хочу полностью отключить возможность входа в WordPress. На сайте есть только мой аккаунт, поэтому посетителям не нужно авторизовываться, и это не ухудшит их опыт.

Когда мне потребуется войти, я могу удалить этот код. Альтернативно, я могу ограничить вход только по своему IP-адресу.

Я пытаюсь реализовать это, перехватывая попытки входа как можно раньше с помощью следующего кода:

if (isset($_POST['pwd']) || isset($_GET['pwd'])) {
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    echo 'Вход на сайт отключен';
    die();
}

Это грубый метод, но он должен работать. Однако некоторые попытки входа все же проходят, и я не знаю, откуда они могут исходить.

Какими еще способами WordPress принимает авторизацию, если не через поле 'pwd'?

Существует ли стандартное решение для полного отключения входа в систему?

Примечание: помимо блокировки wp-login.php я удалил xmlrpc.php, который использовался как дополнительный вектор для брутфорс-атак. В моей текущей конфигурации он не нужен, но ваша может отличаться. Убедитесь, что он вам не требуется, перед отключением.

10
Комментарии

Возможно, это вам поможет: http://wordpress.stackexchange.com/questions/62889/disable-or-redirect-wp-login-php

jas jas
14 нояб. 2015 г. 18:42:06

Я считаю, что надежный пароль должен быть достаточной защитой, если только большой трафик не вызывает перегрузку вашего сайта из-за множества PHP-процессов и проверок в базе данных. В таком случае можно попробовать HTTP-аутентификацию, чтобы боты не могли обращаться к файлам wp-login.php или xmlrpc.php (без запуска PHP-процессов и обращений к БД).

birgire birgire
14 нояб. 2015 г. 18:48:57

@jas - Я пробовал полностью удалить файл wp-login.php. Но все равно получаю уведомления о "неудачной попытке входа". Оказывается, они могут входить через другие методы, помимо страницы wp-login.php.

Michael Khalili Michael Khalili
14 нояб. 2015 г. 22:42:16

@birgire - У меня сложные пароли, но это довольно масштабная атака. Я надеюсь, что это можно будет реализовать и в случае более крупной атаки. Являются ли wp-login.php и xmlrpc.php единственными точками, через которые кто-то может аутентифицироваться на сайте?

Michael Khalili Michael Khalili
14 нояб. 2015 г. 22:44:28

Я считаю, что плагин Wordfence предоставляет возможность блокировки по IP. Атаки методом грубой силы довольно распространены на сайтах любого размера. Он также позволяет ограничивать количество попыток входа.

cameck cameck
15 нояб. 2015 г. 02:18:16

@cameck - У меня уже есть плагин, который автоматически блокирует IP при атаках методом грубой силы. Мой вопрос касается полной блокировки процесса входа. Ещё до попытки аутентификации.

Michael Khalili Michael Khalili
15 нояб. 2015 г. 18:05:33

@MichaelKhalili Ну, вы можете использовать этот плагин: https://wordpress.org/plugins/restricted-site-access/ или есть способ отредактировать файл .htaccess для этого: http://www.inmotionhosting.com/support/website/wordpress/lock-down-wordpress-admin-login-with-htaccess

cameck cameck
15 нояб. 2015 г. 18:58:18

@cameck - Кажется, Restricted site access ограничивает доступ ко всему сайту, а не блокирует логины. Я могу заблокировать wp-admin и wp-login, но birgire упомянул блокировку xmlrpc.php. Этот файл тоже позволяет доступ для входа?

Michael Khalili Michael Khalili
16 нояб. 2015 г. 02:17:01

@MichaelKhalili Хмм, ты прав. Эта ссылка только для блокировки wp-login через .htaccess. Я лично не тестировал, извини, но я бы попробовал! Дайте нам знать, что получится!

cameck cameck
16 нояб. 2015 г. 03:14:10

@cameck В итоге я перестал получать попытки неудачных входов в систему после удаления файла xmlrpc.php. Похоже, они использовали этот файл для более программного способа авторизации.

Michael Khalili Michael Khalili
20 нояб. 2015 г. 07:18:20
Показать остальные 5 комментариев
Все ответы на вопрос 3
6

Ошибка аутентификации должна срабатывать для всех возможных типов аутентификации - формы входа, XML-RPC, AJAX и т.д.

Обновление: на самом деле я понял, что есть способ избежать отправки пользовательского запроса в базу данных

function wpse208677_authenticate($user,$username,$pass) {
  remove_filter('authenticate','wp_authenticate_username_password',20,3);
  return null;
  // если нужно разрешить доступ по IP, проверьте его и верните $user
}

add_filter('authenticate','wpse208677_authenticate', 10,3)
14 нояб. 2015 г. 18:43:46
Комментарии

Это полезно, но я ищу способ полностью отключить логин с самого начала. У меня установлены Sucuri и другой плагин, которые предупреждают меня о brute force атаках. Я беспокоюсь, что это всё равно вызовет срабатывание этих плагинов.

Michael Khalili Michael Khalili
14 нояб. 2015 г. 22:40:53

@MichaelKhalili, на практике это невозможно, так как попытки входа могут поступать из самых разных источников. Если вы хотите заблокировать только wp-login.php или xmlrpc.php, это нужно делать на уровне конфигурации веб-сервера (в Apache можно использовать htaccess), чтобы PHP вообще не выполнялся. Единственное сравнимое по производительности решение на PHP потребует изменений в wp-config.php, а этот файл лучше лишний раз не трогать. Любое другое решение на основе PHP не будет работать лучше, чем предложенный ответ.

Mark Kaplun Mark Kaplun
20 нояб. 2015 г. 07:44:42

Я разобрался с этим после того, как задал вопрос, и обновил свой пост. Я могу поместить код, который проверяет $_POST['pwd'], в must-use плагин (mu-plugins) и отключить xmlrpc.php. Это, кажется, решает проблему. Большая часть атак остановилась благодаря проверке $_POST['pwd'], а остальные прекратились после отключения xmlrpc.php.

Michael Khalili Michael Khalili
20 нояб. 2015 г. 18:21:36

Проблема с удалением файлов в том, что они вернутся при обновлении. Лучше заблокировать в htaccess, если вы не используете xmlrpc

Mark Kaplun Mark Kaplun
20 нояб. 2015 г. 19:20:01

Отличное замечание, Марк. Думаю, в WordPress есть также настройка для отключения поддержки xmlrpc. Мне нужно выделить время, чтобы протестировать это. Я даже не уверен, какой механизм авторизации используется в этом файле.

Michael Khalili Michael Khalili
20 нояб. 2015 г. 23:41:41

Что касается безопасного отключения XML-RPC, я обнаружил, что его можно отключить с помощью фильтра add_filter('xmlrpc_enabled', '__return_false'); Также есть несколько плагинов, которые делают это. Я использовал этот: https://wordpress.org/plugins/disable-xml-rpc/

Michael Khalili Michael Khalili
20 янв. 2016 г. 03:25:24
Показать остальные 1 комментариев
2

Лучший ответ здесь содержит ужасно плохой PHP-код, полностью нерабочий. Вот хорошая версия. У меня недостаточно репутации, чтобы комментировать оригинальный ответ.

Этот код можно в экстренном случае разместить в самом низу файла wp-config.php.

function wpse208677_authenticate($user,$username,$pass) {
  remove_filter('authenticate','wp_authenticate_username_password',20,3);
  return null;
  // если вы хотите добавить IP в белый список, проверьте его и верните $user
}
add_filter('authenticate','wpse208677_authenticate', 1,3)

Другой вариант — запретить доступ к страницам входа и регистрации. Это работает даже при скрытом URL входа в WordPress. Этот код можно разместить в самом верху файла wp-config.php (после открывающего тега <?php).

if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
    die('Сайт в режиме технического обслуживания.');
}
19 мар. 2018 г. 10:27:08
Комментарии

Извините, но это очень плохая идея — размещать код в файле wp-config.php. Также я не вижу, чем ваш код отличается от другого ответа?

Johansson Johansson
19 мар. 2018 г. 10:39:27

Предыдущий ответ от Mark K был обновлен вами, Jack, вчера, исправив опечатку, которую я уже исправил.

Размещать код в wp-config — плохая идея, это было экстренное решение для тех, кто понимает, что они делают. Чем раньше мы вмешаемся, тем меньше ресурсов потребуется WordPress для блокировки входов.

Branndon Branndon
20 мар. 2018 г. 16:17:10
5
-3

вы можете исправить эти проблемы, используя следующие методы:

измените директорию "wp-admin" и защитите её с помощью пароля в файле .htaccess

14 нояб. 2015 г. 19:02:59
Комментарии

Тем, кто рассматривает этот вариант, следует помнить, что публичные AJAX-запросы по-прежнему отправляются в директорию wp-admin. Если ваш сайт использует AJAX, вам необходимо разблокировать путь к admin-ajax.php

Michael Khalili Michael Khalili
14 нояб. 2015 г. 23:14:30

И поскольку WP использует AJAX в ядре, это не следует делать нигде.

kaiser kaiser
14 нояб. 2015 г. 23:45:47

Я согласен, что это не решение для "отключения" регистрации пользователей и входа в систему, что является вопросом здесь. Но @kaiser, почему вы говорите, что этого не следует делать? Я использую это на двух сайтах, которыми лично управляю, где регистрация пользователей отключена. Я также использую защиту паролем через .htaccess для файла wp-login.php. При правильной настройке AJAX-запросы и другие ресурсы из wp-admin (JS, CSS, изображения) не являются проблемой и могут значительно снизить вероятность успешных атак методом перебора.

cybmeta cybmeta
25 нояб. 2015 г. 08:01:12

@cybmeta ты переименовал wp-admin?

kaiser kaiser
25 нояб. 2015 г. 13:25:34

Нет, я этого не делал. Это другой вариант, но он менее безопасен, URL админки сайта можно легко обнаружить, независимо от того, какое имя вы задали. В любом случае, это не объясняет, почему блокировка доступа к этому расположению вообще не должна выполняться. Также я не вижу, как изменение имени лучше, чем блокировка доступа к определенному расположению. Обратите внимание, что контекст в том, что никто кроме вас не будет обращаться туда, так почему блокировка доступа для всех остальных это плохо? В текущем случае, когда только вам разрешен доступ к wp-admin, я бы заблокировал wp-admin через .htaccess, даже если имя изменено.

cybmeta cybmeta
25 нояб. 2015 г. 14:06:05