autenticação básica http

1

Estou usando a autenticação http básica do apache para controlar o acesso, mas quero controlar apenas um nível de acesso ao diretório, ou seja, desejo apenas que o diretório a seja autenticado, mas não os filhos de a (por exemplo, a / b). isso é possível?

<Location /a/>
Options -Indexes
Order Deny,Allow
Allow from all

AuthType Basic
AuthName "Members Only"
AuthUserFile /home/xxxx/.htpasswd
require valid-user

</Location>
    
por user881480 05.09.2011 / 06:23

2 respostas

2

AFAIK isso não é possível. Eu acabei de testar nos arquivos httpd.conf e .htaccess, e isso não funciona.

Isso ocorre porque, em geral, essa configuração não faz sentido - o objetivo de exigir autenticação para um diretório é proteger uma área do site, e os subdiretórios do diretório protegido seriam considerados parte dessa área protegida.

O escopo da autenticação HTTP básica é por domínio - se você precisar de auth para um subdiretório, essas mesmas credenciais serão enviadas em uma solicitação subseqüente para um diretório de nível superior. Isso significa que eles também serão enviados em todas as solicitações para um diretório de nível inferior.

Seria possível implementar isso usando alguma lógica personalizada em seu script do lado do servidor (por exemplo, PHP), mas uma solução melhor seria repensar sua estrutura de diretórios. Não deve haver razão para exigir autenticação para um diretório de nível superior, mas para o nível inferior - você precisa mover o conteúdo dos diretórios de nível inferior para uma área de acesso aberto do site, e a área protegida por senha deve conter apenas conteúdo que deveria ser privado.

Como uma observação secundária - HTTP A autenticação básica sobre HTTP é tão insegura que é quase inútil usá-la - se você tem algum conteúdo que realmente se preocupa em proteger, considere usar a autenticação Digest. Você pode usar o HTTPS para impedir a divulgação de credenciais de autenticação básica e, se estiver usando HTTPS, também poderá usar a autenticação de certificado de cliente para obter a melhor segurança disponível.

    
por 05.09.2011 / 12:10
1

Note que eu não tentei isso, e eu não sou um apache guru, mas supondo que DaveRandom está certo, minha próxima tentativa seria usar um arquivo .htaccess no diretório / A /, então use reescrita URL para apontar as coisas para / A / child, com a lógica de que / A / child nunca causaria a passagem de um diretório para / A / para ler o arquivo .htaccess, já que a interpretação do diretório ocorre mais tarde no processo.

Claro, se isso funcionar, provavelmente é um bug e será corrigido.

    
por 20.11.2011 / 02:28