Для административной области с такими URL-адресами:
wp-admin/
wp-admin/whatever
wp-admin/another-page
wp-adminsecretlogin
Стандартное покрытие базовой аутентификации будет предоставлять запрос имени пользователя и пароля для всех трех URL-адресов и возвращать 403 при всех неудачных попытках аутентификации. Это довольно очевидный сигнал о том, что что-то там существует, и, следовательно, приглашение к доступу через скрипт / брутфорс.
Вместо этого я хотел бы требовать базовую аутентификацию везде, но когда не аутентифицирован, не запрашивать имя пользователя и пароль, а вместо этого возвращать ошибку 404 not found для всех URL-адресов, кроме wp-adminsecretlogin/
URL. По этому индивидуальному URL-адресу может пройти базовая аутентификация и разблокировать остальные административные функции (хотя стандартный вход в приложение все равно будет необходим).
Как мне это сделать с помощью директив apache .htaccess или .conf?
Предполагая, что вы уже настроили что-то, требующее аутентификации для всех целевых URL-адресов (оба wp-admin
и секретный URL-адрес), поместите это в свой блок виртуального хоста:
RewriteCond %{LA-U:REMOTE_USER} ^$
RewriteRule wp-admin/ - [R=404]
Я не тестировал, поэтому я не совсем уверен, успешно ли он закоротит ответ 401, который обычно отправляется на этапе аутентификации, но это стоит того.
Базовая конфигурация аутентификации ответит 401, если пользователь / пароль неверен. 403 (в контексте аутентификации) зарезервирован для аутентифицированные пользователи без разрешений на доступ (т.е. у вас есть два пользователя на AuthUserFile
но также Require user1
и попробуйте получить доступ с помощью user2 с правильным паролем)
403 также отображается при попытке напрямую указать каталог без правильно настроенного autoindex / directoryindex, deny from
директивы, запрещающие правила с помощью mod_rewrite или mod_security и т. д., поэтому обычно это не так много.
Запрашивать базовую аутентификацию на Location /wp-adminsecretlogin
и наличие RewriteRule, такого как тот, который предоставил Шейн, может работать ([R] принимает только 30-кратные коды ошибок, поэтому он может не возвращать браузеру правильно 404, а 301), но это сильно зависит от вашего браузера и от того, как вы просматриваете свои Интернет:
Поскольку веб-серверу потребуется аутентификация только на определенном пути, браузер не может предоставить основной заголовок аутентификации для запросов, которые ранее не вызывали ответ 401, поэтому, если самый первый запрос вашего браузера должен /adminsecretlogin
, это может работать (браузер предполагает, что все будет запрашивать базовую аутентификацию), но если вы ранее пытались получить доступ /
или /wp-admin
(нет ответа 401 в браузере), браузер может «подумать», что эти другие контексты являются общедоступными и не представляют базовый заголовок аутентификации, поэтому rewriterule «запретит» доступ.