Forum Pplware

Versão Completa: [PHP/JS] Download de Ficheiros
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Tenho um site construído, porém existe um "pequeno" problema no que toca ao download de ficheiros...
Se o ficheiro tiver o nome de "file.docx" no caminho "www.website.com/files/" basta aceder ao link "www.website.com/files/file.docx" para obter o ficheiro...

Como é que posso impedir isso? O ideal seria, em vez de aceder ao ficheiro diretamente, seria aceder a um ficheiro em PHP ou JS para identificar a pessoa (sem utilizar o $_GET, porque não gosto de meter informações nos links). Nunca fiz tal coisa, e a pesquisa que fiz... meh

Se poderem colocar links ou certas palavras chave paa pesquisar que me possam estar a escapar, ajudará bastante!
Thanks Smile
Bom dia,

Podes criar um ficheiro .htaccess em que bloqueias o acesso à pasta files assim já ninguém faz o download a partir do nome do ficheiro no link. Se procurares no google irás encontrar muita informação sobre isto.

Para usares um ficheiro php para fazeres o download do ficheiro seria algo do género:

Link: http//teusite.com/download.php?file=52

Em que nesse ficheiro download.php poderias verificar se o utilizador estava autenticado a partir da $_SESSION, e terias de ter na base de dados uma tabela para associares o caminho do ficheiro a um id.

Campos da tabela files na base de dados:
int id,
Varchar path

Supondo que tens a linha na base de dados:
id: 52  path: "files/file.docx"

No php, irias obter o path a partir do id que receber no $_GET e forçavas o download do ficheiro (files/file.docx) forçando os headers da resposta. 

Mais info: http://stackoverflow.com/questions/8485886/force-file-download-with-php-using-header

Cumprimentos
(06-07-2014 12:18)IAMFREEE Escreveu: [ -> ]Link: http//teusite.com/download.php?file=52

Em que nesse ficheiro download.php poderias verificar se o utilizador estava autenticado a partir da $_SESSION, e terias de ter na base de dados uma tabela para associares o caminho do ficheiro a um id.

Supondo que tens a linha na base de dados:
id: 52  path: "files/file.docx"

No php, irias obter o path a partir do id que receber no $_GET e forçavas o download do ficheiro (files/file.docx) forçando os headers da resposta.
Mas se o utilizador tiver acesso a esse link, não terá acesso à pasta toda?
?file=52
Base de Dados devolve "files/file.docx"
Script PHP manda fazer download do ficheiro "http//teusite.com/files/file.docx"

Ou seja, se o utilizador meter mão no link "http//teusite.com/files/" apanha tudo o que é ficheiro, estando ou não autenticado. (a menos que não haja forma de não aceder ao ficheiro "index" da pasta). Certo?
(06-07-2014 15:58)dininis Escreveu: [ -> ]Ou seja, se o utilizador meter mão no link "http//teusite.com/files/" apanha tudo o que é ficheiro, estando ou não autenticado. (a menos que não haja forma de não aceder ao ficheiro "index" da pasta). Certo?

Caso uses um ficheiro .htaccess na pasta files com por exemplo:

Código:
Options -Indexes
O utilizador mesmo que vá a http//teusite.com/files/ não consegue listar os ficheiros existentes.
Procura mais informação como bloquear acessos a directorias/ficheiros no htaccess.
(06-07-2014 23:19)IAMFREEE Escreveu: [ -> ]
(06-07-2014 15:58)dininis Escreveu: [ -> ]Ou seja, se o utilizador meter mão no link "http//teusite.com/files/" apanha tudo o que é ficheiro, estando ou não autenticado. (a menos que não haja forma de não aceder ao ficheiro "index" da pasta). Certo?

Caso uses um ficheiro .htaccess na pasta files com por exemplo:

Código:
Options -Indexes
O utilizador mesmo que vá a http//teusite.com/files/ não consegue listar os ficheiros existentes.
Procura mais informação como bloquear acessos a directorias/ficheiros no htaccess.
não querendo, de forma alguma, abusar da sua disponibilidade, existe forma de, em vez de mostrar o erro 403 (não tem acesso), mostrar um erro 404 (ficheiro inexistente)? Isto é, sem recorrer a qualquer tipo de redireccionamento (o que modifica o link que o "utilizador" colocou no browser, indicando ao mesmo que o ficheiro, existe mesmo).
(08-07-2014 20:33)dininis Escreveu: [ -> ]
(06-07-2014 23:19)IAMFREEE Escreveu: [ -> ]
(06-07-2014 15:58)dininis Escreveu: [ -> ]Ou seja, se o utilizador meter mão no link "http//teusite.com/files/" apanha tudo o que é ficheiro, estando ou não autenticado. (a menos que não haja forma de não aceder ao ficheiro "index" da pasta). Certo?

Caso uses um ficheiro .htaccess na pasta files com por exemplo:

Código:
Options -Indexes
O utilizador mesmo que vá a http//teusite.com/files/ não consegue listar os ficheiros existentes.
Procura mais informação como bloquear acessos a directorias/ficheiros no htaccess.
não querendo, de forma alguma, abusar da sua disponibilidade, existe forma de, em vez de mostrar o erro 403 (não tem acesso), mostrar um erro 404 (ficheiro inexistente)? Isto é, sem recorrer a qualquer tipo de redireccionamento (o que modifica o link que o "utilizador" colocou no browser, indicando ao mesmo que o ficheiro, existe mesmo).

Sim apensas usando o .htaccess., basta pesquisares no google sobre o assunto e logo encontrarás.
URL's de Referência