Retirar acesso directo a um ficheiro... - Desenvolvimento Web - Portugal-a-Programar
Retirar acesso directo a um ficheiro...
By KiNgPiTo, December 14, 2009 in Desenvolvimento Web
A minha duvida é esta: Tenho um site com uma área de downloads de ficheiros .doc e .pdf e penso que alguns .png's também lá vão ficar para download. O problema é que eu só quero que tenham acesso a partir do site, tipo ao clicar no botão download faz o download e mais nada mas se for pela barra de endereço e indicar o caminho para o ficheiro (ex.: www.enderecoteste.com/downloads/ficheiro.pdf) ele abre na mesma e eu não quero, queria que aparece-se uma mensagem ou até nem aparece-se nada...
PS.: Meti nesta área pois não penso que isto seja algo de programação mas talvez configurações maybe no htaccess mas eu não faço a mínima ideia..
Mete os ficheiros a serem sacados por php.
www.enderecoteste.com/downloads/getfile.php?name=xxx.pdf
(isto dentro do sistema)
.. e impedes o acesso directo a pasta dos downloads por htaccess.
Já estão a ser acedidos por php, não sei é impedir o acesso a pasta pelo htaccess 🤔 Vou procurar como é que é, nunca trabalhei com o htaccess
Inseri um htaccess na pasta dos downloads com o codigo: deny from all
o problema é que agora nem pelo ficheiro php consigo aceder....
Isso é porque estás a aceder por http, o que é um comportamento normal.
Por acaso não me lembrei disso. Mas podes fazer outra coisa. Em vez de usares htaccess, crias uma variável global definida no index do sistema, e verifica nesse getfile.php se a mesma está definida ou não. Se o link for acedido directamente, impedes o processo.
defined('FOO') or die('Querias! Muhohahaha!');
Mas fazendo isso, o ficheiro continua a ser acedido directamente com o caminho absoluto (sem ser por php, nao sei se me fiz entender..)
Aliás encontrei uma solução ainda mais adequada ao que preciso.. Pelo htaccess (que esta na pasta dos downloads), inseri este código:
AuthUserFile /httpdocs/downloads/.htpasswd (vai buscar o user e a pass)
e apenas deixa aceder aos ficheiros da pasta se meter a password... o ideal e que não sei como, era através do script php inserir o user e a pass dessa autenticação e aceder ao ficheiro.. alguma ideia (obrigadão pela ajuda até então )
E que tal colocar essa directoria de ficheiros acima do httpdocs, e depois com um .php "puxas" o ficheiro desse nível acima?
Podes usar a mesma estratégia que se usa para prevenir hot-linking, não sei se adequa ao teu problema:
Põe isto no .htaccess onde estão localizados os tais ficheiros para download. Só dentro do teu domínio é que eles podem ser acedidos.
RewriteCond !^http://(www\.)?dominio\.com/.*$ [NC]
RewriteRule .*\.(doc|pdf)$ - [F,L]
Penso que deve funcionar, mas não testei.
O alojamento tem a pasta httdocs como a raiz.. nao posso ver o que está para traz..
Nao consegui.. dá este erro:
Isso não, substituis o domínio pelo teu suponho? Deves ter feito algo mal e o interpretador está a dar erro... Vê no ficheiro de erros do Apache qual é o problema.
Ando a testat no localhost para ver como funciona e como e que ficaria com o htaccess que deste a parte do dominio? é que com ? e outros caracteres baralhou-me todo
Não dá para exprimentar lá muito bem se for localmente. Terias de ter alguém no exterior a tentar aceder para ver se realmente estava a bloquear ou não.
Porque se tentares aceder pelo teu próprio servidor, ele vai-te dar acesso como é lógico. Mas quando tens ficheiros num servidor remoto, qualquer pessoa que aceda está fora do domínio e nunca terá acesso (pelo menos é essa a ideia).
Concordo com esta solução. Colocas todos os ficheiros que não queres que sejam acedidos directamente numa pasta, seja ela "protected_files". Dentro desta pasta, colocas um .htaccess com os conteúdos:
Depois, com um ficheiro php na raiz do site (ou noutro lado qualquer, excepto na pasta protected_files), abres o ficheiro para leitura e "despejas" no browser, consoante o tipo de dados pretendido. Há muitos exemplos na net. Isto funciona, porque o PHP está a ir buscar localmente os conteúdos do ficheiro, através do sistema de ficheiros, enquanto que se fosses buscá-lo por HTTP já obterias o erro 403 Forbidden.
Tens toda a razão! Não estava a funcionar pois estava a aceder sempre a partir do meu servidor local, não fazendo hotlinking nenhum... Acedi por outro pc da rede e já bloqueou totalmente e autoriza o script a fazer o download. Alojei também no servidor e impecável!