Como negar o acesso da web a alguns arquivos?

9

Eu preciso fazer uma operação um pouco estranha.

Primeiro, eu corro no Debian, apache2 (que 'roda' como usuário www-data)

Então, eu tenho um arquivo de texto simples com .txt ot .ini, ou qualquer extensão, não importa.

Esses arquivos estão localizados em subpastas com uma estrutura como esta:

www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar.txt

portanto, o nome do arquivo é sempre o mesmo, idem para a 'hierarquia', apenas mude o nome da pasta: /folder-name-static/folder-name-dinamyc/file-name-static.txt

O que devo fazer é (eu acho) relativamente simples: eu devo ser capaz de ler esse arquivo por programas no servidor (python, php por exemplo), mas se eu tentar recuperar o conteúdo do arquivo por broswer (digitando o arquivo url www.example.com/folder1/car/foobar.txt, ou via cUrl, etc.) Devo receber um erro proibido, ou qualquer outra coisa, mas não acesse o arquivo .

Também seria legal que até mesmo o acesso a esses arquivos via FTP fosse 'oculto', ou de qualquer forma não pudesse ser baixado (pelo menos eu uso com a raiz do ftp e os dados do usuário)

Como posso fazer?

Encontrei isso online, seja colocado no arquivo .htaccess:

<Files File.txt>
 Order allow, deny
 Deny from all
</ Files>

Parece funcionar, mas apenas se o arquivo estiver na raiz da Web (www.example.com / myfile.txt) e não em subpastas. Além disso, as pastas no segundo nível (www.example.com/folder1/fruit/foobar.txt) serão criadas dinamicamente. Eu gostaria de evitar ter que alterar o arquivo .htaccess de tempo.

É possível criar uma regra, algo assim, que seja válida para todos os arquivos com nome próprio, que está em * www.example.com / folder-name-static / * folder-name-dinamyc / *** file-name-static.txt *, onde essas partes são sempre as mesmas , apenas ** essa mudança ?

EDITAR :

Como Dave Drager disse, eu poderia semplificar isso mantendo os arquivos fora do diretório acessível da web. Mas esses diretórios conterão outros arquivos também, imagens e coisas usadas pelos meus usuários, então eu simplesmente tento não ter um sistema de pastas duplicadas, como:

/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]

//and, then for the 'secrets' files:

/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt
    
por Strae 09.06.2009 / 15:33

6 respostas

12

Você pode usar Arquivos / FilesMatch e uma expressão regular:

<Files ~ "\.txt$">
    Order allow,deny
    Deny from all
</Files>

É assim que o .htpasswd está protegido.

ou redirecione qualquer acesso de .txt para um 404:

RedirectMatch 404 \.txt$
    
por 09.06.2009 / 15:41
1

Sim, tudo isso é possível. No entanto, se você tiver programas no servidor que precisam acessar arquivos de texto, eles devem residir fora da raiz da web. Por exemplo, se seus arquivos da web estiverem em ~ / public_html /, você deverá armazená-los em ~ / data. Não há motivos para colocá-los na pasta html pública.

Além de removê-los da pasta da Web, verifique se as permissões do Unix estão definidas corretamente nelas. O usuário dos scripts precisaria ter acesso de leitura (gravação?), Mas qualquer outra pessoa não precisa ter esse acesso.

Se você precisar desses arquivos em uma pasta acessível pela Web, existem maneiras de fazer o que você está solicitando via mod_rewrite. Veja o seguinte site para muitos exemplos, um dos quais deve se encaixar no projeto.

link

    
por 09.06.2009 / 15:40
0

Por que não usar permissões de arquivo unix padrão para negar acesso ao arquivo?

Há uma explicação decente na wikipedia sobre permissões de arquivos unix

    
por 09.06.2009 / 15:36
0

Coloque o arquivo .htaccess no subdiretório e, na instrução, defina AllowOverride All

    
por 09.06.2009 / 15:37
0

Você pode usar ACLs do Linux .

    
por 09.06.2009 / 16:08
0

Depois de ler todos vocês, notei que o arquivo .htaccess pode ser o caminho para mim: só afeta os arquivos na pasta onde está.

Mas minhas pastas são geradas dinamicamente. Eu não acho que copiar o arquivo .htaccess ou recriá-lo toda vez que eu criar uma nova pasta é uma maneira confiável.

Como Dave disse, o caminho lógico deve ser armazenar os arquivos de texto de configuração fora da pasta acessível pela Web.

Mas em cada pasta eu tenho que armazenar outros arquivos, imagens para exemplos, que devem ser acessíveis pela web ... e eu ainda não acho que replicar a estrutura de pastas, dentro e fora do diretório raiz da web, é confiável caminho também. Portanto, precisarei alterar até mesmo a configuração do apache para incluir a pasta config no caminho permitido do php. Isso não deve ser um problema.

Então, se eu não tiver o melhor , eu tenho que escolher o menos pior .

Vou usar a solução de vários arquivos .htaccess, por enquanto, esperando não ter arrependimentos no futuro.

Qualquer outra solução é apreciada.

    
por 10.06.2009 / 11:50