KakapoWP KakapoWP
Вход Попробовать
Справочный центр/Security/Перенос адреса входа: настройка, проверка, возврат

Перенос адреса входа: настройка, проверка, возврат

Относится к: Kakapo Security· 4 мин чтения

Что должно быть в порядке заранее

По умолчанию функция выключена, и сама по себе она не включается никогда. Три обстоятельства полностью исключают перенос — переключатель тогда остаётся заблокированным и называет причину: (1) В wp-config.php стоит стоп-кран define( 'KWPSEC_LOGIN_SLUG_OFF', true );. (2) Установка представляет собой сеть мультисайта; там все сайты используют один вход, перенос должен был бы происходить в масштабе всей сети. (3) Постоянные ссылки стоят на «Простые». Тогда путь вроде /gartentor вообще не доходит до PHP, веб-сервер отвечает раньше кодом 404. Переключись в Настройки › Постоянные ссылки на другую структуру, прежде чем продолжать.

Выбрать путь

Разрешены от 3 до 40 символов: строчные буквы, цифры, дефис и подчёркивание. Никаких косых черт, никаких умлаутов, никакой точки; заглавные буквы приводятся к строчным. При сохранении выполняются четыре проверки: имена из обычных ботовых списков (login, wp-login, admin, wp-admin, anmelden, dashboard и подобные) отклоняются, потому что их нашли бы снова за считаные минуты. Если в установке WordPress уже есть файл или каталог с таким именем, путь отклоняется — веб-сервер выдал бы их прежде, чем дело дойдёт до PHP. Зарезервированные маршруты вроде wp-json, feed, author, category, sitemap или favicon заблокированы. И если по этому пути уже лежит запись или страница, путь отклоняется, потому что после этого она стала бы недоступной. Сохранённый путь ещё не действует — он вступает в силу лишь тогда, когда ты дополнительно включишь перенос.

Включение: что при этом происходит автоматически

При переключении настройка сохраняется, и сервер выполняет затем два настоящих HTTP-запроса к собственной установке: один к новому адресу, один к старому. У каждого запроса лимит времени 8 секунд, он не следует перенаправлениям и не отправляет куки. В качестве доказательства того, что ответила действительно страница входа, в возвращённом тексте ищутся id="loginform" и name="log". Если новый адрес отвечает HTTP 404 и без формы входа, изменение немедленно отменяется и восстанавливается прежнее состояние — при nginx в этом случае чаще всего не хватает строки try_files, при Apache — файла .htaccess. Если проверка проходит, плагин отправляет новый адрес обычным текстовым письмом на указанный адрес для уведомлений (в качестве замены — на адрес электронной почты администратора); в письме стоит также строка стоп-крана для wp-config.php. Ответное сообщение говорит без прикрас, приняла ли wp_mail() сообщение — если нет, запиши адрес прямо сейчас. Запись в протокол активности тоже создаётся.

Что меняется в работе

По новому пути подключается оригинальный файл wp-login.php, а не его копия — обновления безопасности WordPress действуют там сразу. Для вышедших из системы /wp-login.php ведёт себя как любой несуществующий адрес: запрос переписывается на незанятый путь и совершенно обычным образом отрисовывается темой как 404, без собственного сообщения об ошибке — собственное сообщение было бы указанием на то, что здесь что-то спрятано. Кто вошёл в систему, проходит по-прежнему; так задумано. Если вышедший из системы открывает /wp-admin/, его через 302 отправляет на главную страницу, а не на вход, иначе новый адрес оказался бы в заголовке Location. admin-ajax.php, admin-post.php, load-styles.php и load-scripts.php остаются доступными, чтобы контактные формы, корзины и отзывы продолжали работать. Все адреса, которые WordPress создаёт через site_url(), network_site_url() или wp_redirect() — wp_login_url(), wp_logout_url(), wp_lostpassword_url(), атрибут action формы, — автоматически указывают на новый путь.

Если ты закрыл себе доступ или что-то заклинило

Первый путь: пока в твоём браузере лежит действительная кука входа, ты попадаешь на /wp-login.php и /wp-admin/ как прежде. Второй путь: адрес указан в письме о переносе. Третий путь: впиши define( 'KWPSEC_LOGIN_SLUG_OFF', true ); в wp-config.php — тогда сразу снова действует wp-login.php, а переключатель остаётся заблокированным, пока ты не удалишь эту строку. В админке есть, кроме того, две кнопки: одна повторяет проверочный запрос и выводит HTTP-код, время ответа и статус старого адреса, другая заново отправляет письмо с доступом. Если проверочный запрос сообщает о сетевой ошибке вместо HTTP-кода, у хостера чаще всего заблокирован loopback — это не значит, что адрес не работает; открой его один раз сам. Если ссылка другого плагина по-прежнему ведёт на wp-login.php, она там прописана жёстко и не идёт через site_url(); переписать можно только то, что проходит через эти фильтры. Вернуть обратно можно в любой момент тем же переключателем.

Эта статья оказалась полезной?