基本 http 身份验证

基本 http 身份验证

我正在使用 apache 的基本 http 身份验证来控制访问,但是,我只想控制一个级别的目录访问,这意味着,我只希望目录 a 经过身份验证,但不希望目录 a 的子目录(例如 a/b)经过身份验证,这可能吗?

<位置 /a/>
期权-指数
订单拒绝、允许
允许所有人

AuthType 基本版
AuthName“仅限会员”
AuthUser文件 /home/xxxx/.htpasswd
需要有效用户

</位置>

答案1

据我所知这是不可能的。我刚刚在 httpd.conf 和 .htaccess 文件中尝试过,但不起作用。

这是因为一般来说,这种设置没有意义 - 要求对目录进行身份验证的目的是保护网站的某个区域,而受保护目录的子目录将被视为该受保护区域的一部分。

HTTP Basic 身份验证的范围是每个域的 - 如果您需要对子目录进行身份验证,则相同的凭据将在对更高级别目录的后续请求中发送。这意味着它们也将在对较低级别目录的所有请求中发送。

可以使用服务器端脚本(例如 PHP)中的一些自定义逻辑来实现这一点,但更好的解决方案是重新考虑目录结构。没有理由要求对较高级别的目录进行身份验证,而对较低级别的目录则不需要 - 您需要将较低级别的目录中的内容移动到站点的开放访问区域,并且受密码保护的区域应仅包含应为私人的内容。

附注:HTTP 上的 HTTP Basic 身份验证非常不安全,几乎使用它完全没有意义 - 如果您确实需要保护某些内容,请考虑使用摘要式身份验证。您可以使用 HTTPS 来防止基本身份验证凭据泄露,如果您使用 HTTPS,您还可以使用客户端证书身份验证来获得最佳的安全性。

答案2

请注意,我还没有尝试过这个,而且我也不是 Apache 专家,但是假设 DaveRandom 是正确的,我的下一次尝试将是在目录 /A/ 中使用 .htaccess 文件,然后使用 URL 重写将内容指向 /A/child,其逻辑是 /A/child 永远不会导致目录遍历到 /A/ 读取 .htaccess 文件,因为目录解释发生在该过程的稍后阶段。

当然,如果可行,那么这可能是一个错误并且将被修复。

相关内容