基本的httpauthentication

我使用apache的基本httpauthentication来控制访问,但是,我只想控制一个目录访问级别,也就是说,我只希望目录a被authentication,但不是a的子(例如a / b),这是可能的?

 <位置/ a />
选项 - 索引
拒绝订单,允许
全部允许

 AuthType基本
 AuthName“仅限会员”
 AuthUserFile /home/xxxx/.htpasswd
要求有效的用户

 </位置>

AFAIK这是不可能的。 我刚刚在httpd.conf和一个.htaccess文件中试过,并且不起作用。

这是因为一般来说,这种设置没有任何意义 – 要求对目录进行身份validation的关键是保护您的站点的一个区域,受保护的目录的子目录将被视为该受保护区域的一部分。

HTTP基本身份validation的范围是按域的 – 如果您需要对子目录进行身份validation,那么相同的凭据将在后续请求中发送到更高级别的目录。 这意味着他们也将被发送到一个较低级目录的所有请求。

在服务器端脚本(比如PHP)中使用一些自定义逻辑来实现这一点是可能的,但更好的解决scheme是重新考虑你的目录结构。 应该没有理由要求对更高级目录进行身份validation,而不要求更低级目录的身份validation – 您需要将低级目录中的内容移动到站点的开放访问区域,并且密码保护区域只应包含内容这应该是私人的。

作为一个方面说明 – 基于HTTP的HTTP基本身份validation是如此不安全, 几乎没有使用它 – 如果你有一些你真正关心保护的内容,可以考虑使用摘要身份validation。 您可以使用HTTPS来防止泄露基本身份validation凭证,并且如果您使用的是HTTPS,则还可以使用客户端证书身份validation来获得最佳的可用安全性。

请注意,我没有尝试过这一点,我不是一个Apache大师,但假设DaveRandom是正确的,我的下一个尝试将是在/ A /目录中使用.htaccess文件,然后使用URL重写指向/ A /孩子,其逻辑是/ A /孩子永远不会导致目录遍历到/ A /来读取.htaccess文件,因为目录解释发生在后面的过程中。

当然,如果这样做,这可能是一个错误,将被修复。