Apache: Stealth 404 область администратора до аутентификации через базовую аутентификацию, затем разрешить доступ

Учитывая административную область с URL, как это:

wp-admin/
wp-admin/whatever
wp-admin/another-page
wp-adminsecretlogin

Стандартное покрытие basic-auth предоставит запрос имени пользователя и пароля для всех трех URL-адресов и вернет 403 при всех неудачных попытках авторизации. Это довольно очевидный сигнал о том, что там что-то существует, и, таким образом, является приглашением к доступу с использованием скриптов и брутфорса.

Вместо этого мне бы хотелось, чтобы везде требовалась базовая аутентификация, но когда она не аутентифицирована, не запрашивались имя пользователя и пароль, а вместо этого возвращалась ошибка 404 not found для всех URL, кроме wp-adminsecretlogin/ URL-адрес. При этом индивидуальном URL-адресе сайта базовая аутентификация может пройти и разблокировать остальные административные функции (хотя стандартный вход в систему приложения все равно будет необходим).

Как бы я это сделал с помощью директив apache .htaccess или.conf?

2 ответа

Предполагая, что вы уже настроили что-то, что требует аутентификации на всех целевых 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, подобного тому, который предоставлен Shane, может работать ([R] принимает только 30-кратные коды ошибок, поэтому он может возвращать браузер не 404 правильно, а 301), но это сильно зависит от вашего браузера и от того, как вы просматриваете ваш веб-сайт:

Поскольку веб-сервер будет требовать аутентификацию только по определенному пути, браузер не сможет представить базовый заголовок аутентификации для запросов, которые ранее не запускали ответ 401, поэтому, если самый первый запрос от вашего браузера должен /adminsecretlogin, это может работать (браузер предполагает, что все будет запрашивать базовую аутентификацию), но если вы ранее пытались получить доступ / или же /wp-admin (нет ответа 401 обратно в браузер), браузер может "думать", что эти другие контексты общедоступны и не представляют базовый заголовок аутентификации, поэтому rewriterule "запретит" доступ.

Другие вопросы по тегам