Apache2 - Permite somente o acesso a .pdf e índice no WebDAV

1

Eu configurei um WebDAV com o apache2 para usá-lo com o Zotero. Como nós só queremos fazer o upload e download de PDFs sobre este webdav, eu quero evitar o upload ou download de quaisquer outros arquivos que não os arquivos PDF. Para isso, eu usei:

<Location *>
        AuthType Basic
        AuthName DAV
        AuthUserFile "*"
        Require valid-user
        RewriteEngine On
        RewriteRule !(\.pdf)$ - [F,NC] # only allow access to pdf to prevent misuse
</Location>

Isso funciona bem até que o Zotero verifique se você tem acesso ao DAV que ele verifica chamando o URL base, por exemplo, %código%. Com essa configuração, o usuário não tem permissão para visitar o índice DAV. Como preciso alterar meu bla.com/zotero para permitir somente arquivos pdf e o índice do diretório? Eu tentei adicionar RewriteRules e algumas outras coisas, mas isso não funcionou, ainda 403 para o índice.

Devido a nossa configuração, a diretiva RewriteCond %{REQUEST_FILENAME} !-d parece não funcionar, então temos que continuar com FilesMatch por enquanto.

Muito obrigado pela sua ajuda!

    
por Maxbit 18.11.2018 / 17:15

1 resposta

0

I've tried adding RewriteCond %{REQUEST_FILENAME} !-d ...

Diretivas em um contexto de servidor (ou vHost) executar antes a requisição foi mapeada para o sistema de arquivos, então a variável REQUEST_FILENAME server ainda não contém o caminho do sistema de arquivos para o qual a URL mapeia ( ele simplesmente contém o URL).

Para verificar o caminho do sistema de arquivos em um contexto de servidor (se ele é mapeado para um arquivo ou diretório), é necessário usar um look-ahead. Tente o seguinte:

RewriteCond %{LA-U:REQUEST_FILENAME} !-d
RewriteRule !(\.pdf)$ - [F,NC,NS]

NB: tenha cuidado com os comentários de fim de linha; eles não são suportados pelo Apache.

O sinalizador NS ( nosubreq ) na diretiva RewriteRule é necessário para impedir o bloqueio de sub-solicitações. Quando o mod_autoindex gera a listagem de diretórios, ele também faz sub-requisições adicionais em cada arquivo no diretório para buscar o tamanho do arquivo e os últimos registros de data e hora, etc. Você precisa impedir que sua verificação mod_rewrite seja acionada nessas sub-petições.

UPDATE: With the NS flag and without lookahead, it seems to work! But why is that the case? As you explained, lookahead should be necessary?

Se essas diretivas estiverem realmente dentro de um contêiner <Directory> ou <DirectoryMatch> (em outras palavras, elas estão em um contexto diretório , o mesmo que .htaccess ), será necessário usar o variável de servidor REQUEST_FILENAME simples, sem o look-ahead.

Isso também parece ser consistente com a saída que você está vendo no log do servidor.

    
por 18.11.2018 / 18:04