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

Скрытие области аутентификации HTTP путем отправки 404 на неизвестные IP-адреса?

У меня есть Apache (2.2), обслуживающий веб-приложение на example.com. В этом веб-приложении есть страница отладки, доступная через example.com/debug. /debug в настоящее время защищен базовой аутентификацией HTTP. Поскольку есть только очень небольшая база пользователей, у которой есть доступ к странице отладки, я хотел бы скрыть ее на основе IP-адреса и вернуть 404 клиентам, не имеющим доступа к нашему VPN.

Обслуживание 404 только на основе IP-адреса очень просто и описано в https://serverfault.com/a/13071. Но как только я добавляю аутентификацию, пользователи видят 401 вместо 404.

По сути, мне нужно:

if ($REMOTE_ADDR ~ 10.11.12.*):
  do_basic_auth (aka return 401)
else:
  return 404

ОБНОВИТЬ Это работает:

<VirtualHost ...>
...
SetEnvIf REMOTE_ADDR 10.128.0.* HAS_debug=1
SetEnvIf REMOTE_ADDR 10.128.1.* HAS_debug=1
SetEnvIf REMOTE_ADDR 10.128.2.* HAS_debug=1

RewriteEngine On
RewriteCond %{ENV:HAS_debug} !=1
RewriteRule ^/debug($|/) - [R=404,L]

<Location /debug>
    AuthType Basic
    AuthName "hidden-debug"
    AuthUserFile ...
    Require valid-user
</Location>
</VirtualHost>

Важнейшей частью было переписывание вне из Location.

Если у вас есть / не возражаете против включения mod_rewrite, вы можете скрыть каталог от неизвестных IP-адресов, переписав запросы для каталога отладки (в .htaccess в родительском каталоге), чтобы вернуть 404, если IP-адрес неизвестен, и оставить стандартный basic auth .htaccess в вашем каталоге отладки для аутентификации пользователей, которые зашли так далеко.

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !=<vpn ip>
RewriteRule ^debug($|/) - [L,R=404]

(Этот пример взят непосредственно из Возврат кода 404 при несанкционированных попытках нашел, когда искал в Google точный синтаксис, который вам нужен)