A diretiva de limite do Apache não funciona como esperado

1

Eu quero usar 'Limite' para permitir GETs e POSTs, para uma página que requer autenticação, apenas de determinados sites. Eu quero autenticação para GETs e POSTs de um determinado IP, que deve ser capaz de acessar sem autenticar.

<Limit GET POST>
allow from allowableSite.com
</Limit>

Isso não funciona. Tudo é não autorizado

<Limit GET POST>
allow from all
</Limit>

Isso também não funciona. Tudo ainda é desautorizado (401)

A única coisa que passa pela autenticação é essa

<Limit GET POST>
satisfy any
</Limit>

Em seguida, qualquer GET ou POST será bem-sucedido ... Mas isso não é o que eu quero, pois só quero que o acesso esteja disponível em um determinado site. E 'permitir' não está funcionando como esperado. Alguma coisa poderia estar configurada em algum outro lugar que esteja causando esse comportamento? Qualquer ajuda é muito apreciada.

    
por MF86 05.04.2011 / 02:50

1 resposta

3

Isso é um pouco difícil sem ver mais da sua configuração. Como o Satisfy corrigiu, acho que há um Require aplicado a esse local. A diretiva Satisfy any faz com que seja compatível com o Allow (com seu host de origem) ou com o Require (com seu usuário) para permitir acesso.

Usar um nome de host com Allow é um suspeito inicial; isso depende do DNS direto e reverso ser impecável para o cliente. Estou um pouco incerto sobre o que você quer dizer com "somente de certos sites"; você precisa que a diretiva Allow seja inclusiva de todos os sistemas clientes permitidos. Se todos os seus DNS avançados e reversos não corresponderem exatamente ao que você especificou, isso seria quebrado.

Além disso, o uso de <Limit> depende de haver Deny from all fora do bloco para restringir outros métodos. Portanto, se o Order estiver definido como Allow,Deny , isso será quebrado. <LimitExcept> é melhor quando possível, pois você pode ser mais explícito sobre o bloqueio de métodos indesejados; <Limit> arrisca acesso não intencional de mais alto nível.

Vou definir coisas explicitamente que você provavelmente tem em outro lugar, mas quero ter certeza de que algo de outro lugar não pode quebrá-lo (exceto um Deny ; certifique-se de que não haja nenhum extra acima). :

Order Allow,Deny
# allowed subnet
Allow from 10.5.1.0/24
# allowed host
Allow from 86.12.76.12

AuthType Basic
AuthName "blah"
AuthUserFile /path/to/htpasswd
Require valid-user

Satisfy all

<LimitExcept GET POST>
    Deny from all
</LimitExcept>
    
por 05.04.2011 / 03:24