通过向未知 IP 发送 404 来隐藏 HTTP Auth-Realm?

通过向未知 IP 发送 404 来隐藏 HTTP Auth-Realm?

我有一个 Apache (2.2) 在 上为 Web 应用程序提供服务example.com。该 Web 应用程序有一个可通过 访问的调试页面example.com/debug/debug当前受 HTTP 基本身份验证保护。由于只有极少数用户有权访问调试页面,因此我想根据 IP 地址隐藏它并返回404给未从我们的 VPN 访问的客户端。

仅基于 IP 地址提供 404 服务非常简单,具体描述如下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

答案1

如果您介意启用 mod_rewrite,您可以通过重写调试目录的请求(在父目录的 .htaccess 中)来隐藏来自未知 IP 的目录,如果 IP 未知则返回 404,并在调试目录中留下标准的基本身份验证 .htaccess,用于对到达该位置的用户进行身份验证。

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

(此示例直接摘自未经授权的尝试返回 404 代码当我在谷歌搜索你需要的确切语法时发现)

相关内容