• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

KiNgPiTo

Retirar acesso directo a um ficheiro...

14 mensagens neste tópico

Boas pessoal!!

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..

Cumprimentos

Obrigado  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mete os ficheiros a serem sacados por php.

Ex :

www.enderecoteste.com/downloads/getfile.php?name=xxx.pdf

(isto dentro do sistema)

.. e impedes o acesso directo a pasta dos downloads por htaccess.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mete os ficheiros a serem sacados por php.

Ex :

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  :hmm: Vou procurar como é que é, nunca trabalhei com o htaccess

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Inseri um htaccess na pasta dos downloads com o codigo: deny from all

o problema é que agora nem pelo ficheiro php consigo aceder....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

Ex :

index.php

define('FOO', true);

getfile.php

defined('FOO') or die('Querias! Muhohahaha!');

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

AuthName "Area Protegida"

AuthType Basic

AuthUserFile /httpdocs/downloads/.htpasswd (vai buscar o user e a pass)

Require valid-user

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 :))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E que tal colocar essa directoria de ficheiros acima do httpdocs, e depois com um .php "puxas" o ficheiro desse nível acima?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond !^http://(www\.)?dominio\.com/.*$ [NC]
RewriteRule .*\.(doc|pdf)$ - [F,L]

Penso que deve funcionar, mas não testei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E que tal colocar essa directoria de ficheiros acima do httpdocs, e depois com um .php "puxas" o ficheiro desse nível acima?

O alojamento tem a pasta httdocs como a raiz.. nao posso ver o que está para traz..

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.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond !^http://(www\.)?dominio\.com/.*$ [NC]
RewriteRule .*\.(doc|pdf)$ - [F,L]

Penso que deve funcionar, mas não testei.

Nao consegui.. dá este erro:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, admin@admin and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E que tal colocar essa directoria de ficheiros acima do httpdocs, e depois com um .php "puxas" o ficheiro desse nível acima?

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:

deny from all

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond !^http://(www\.)?dominio\.com/.*$ [NC]
RewriteRule .*\.(doc|pdf)$ - [F,L]

Penso que deve funcionar, mas não testei.

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!

Muito obrigado a todos pela ajuda... 5 estrelas :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora