Назад | Перейти на главную страницу

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

Для административной области с такими 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 «запретит» доступ.