• 0
Sign in to follow this  
damy

Area Restrita Com Vários Logins E Senhas

Question

Estou utilizando um sistema de login para acesso restrito em site em que cada usuário tem uma senha diferente, no caso, utilizei session.

No entanto, preciso de ajuda, para saber como fazer com que os arquivos que não têm extensão php também sejam bloqueados para o acesso direto (somente sejam mostrados após a verificação dos dados do usuário).

Esses arquivos que estão abrindo direto (se colocar o endereço no browser), têm extensão pdf, zip, jpg e alguns outros.

Desde já, muito obrigada pela força.

Normalmente fico sem computador no final de semana, mas na segundona estou por aqui, ok?

Abraços,

Damy

Share this post


Link to post
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Humm.... bloquear por programação php o acesso direto a arquivos PDF. ... ZIP ... difícil

Só se você colocar estes arquivos em um local que pelo navegador não se possa acessar, quem vai acessar estes arquivos é o interpretador php. Mas desta forma vai ter que mudar toda a estrutura de diretórios e arquivos.

Se você usa apache, o meio mais fácil é usar .htaccess

Dê uma olhada nos links abaixo:

http://www.imasters.com.br/forum/lofiversi...hp/t140838.html

http://forum.imasters.com.br/index.php?sho...mode=linearplus

Alguém sabe de uma maneira de via PHP fazer esse controle de acesso aos arquivos?

Alguma outra idéia?

Share this post


Link to post
Share on other sites
  • 0

Exatamente o que o Helton disse, a melhor maneira é usar o próprio recurso do Apache (se esse for o programa que roda no seu servidor), no PHP o que eu uso é ao enviar o arquivo, adicionar algum coisa no começo ou no fim do nome dele (claro essa coisa são caracteres aleatórios), ai eu gravo o nome novo do arquivo no BD e a partir do PHP eu gero a lista dos arquivos, essa lista vai ter apenas o ID do arquivo no BD, eu envio esse ID para um sistema que força o download e na hora do download renomeio o arquivo para o nome original, isso permite que ninguém nunca saiba qual o real nome do arquivo no servidor... ai o cara pode se matar digitando www.dominio/arquivotal.mp3 (por exemplo), quando na verdade o nome do arquivo no servidor é www.dominio/axvckdkvrdfarquivotal.mp3 (por exemplo).

Share this post


Link to post
Share on other sites
  • 0

Bom dia !

Agradeço muito a vocês, Helton e ESerra, pela ajuda !

Bem, tenho algumas dúvidas, diante das sugestões que vocês me deram...

No caso do .htaccess, eu utilizo em outro site, mas é sempre a mesma senha para acesso.

Não tenho idéia de como usá-lo com várias senhas.

Referente ao sistema do PHP, achei super interessante, mas não entendi como "forçar" o download.

Também não tenho certeza se consegui acompanhar toda a lógica corretamente...

Pensei em enviar os arquivos com nomes diferenciados do real para o BD e corretos para o servidor , depois, após a verificação do login e senha, fazer a substituição no PHP (com if, talvez?) para o nome correto e a pessoa acessaria no browser o arquivo correto.

...mas ao escrever já vi que não tem sentido, já que a pessoa veria o endereço correto...

é... realmente não entendi esta parte da substituição pelo arquivo correto e do download...

Agora, no meu caso, não posso forçar o download, pois o objetivo desses arquivos é que o funcionário cadastrado na empresa possa acessá-los e visualizá-los a partir do computador do cliente que está sendo atendido.

Ah... então, o ideal é funcione tanto no ie quanto no firefox, mas principalmente no ie que ainda é o mais utilizadoe, provavelmente o cliente o terá em sua máquina.

Abraço,

Damy

Edited by damy

Share this post


Link to post
Share on other sites
  • 0

Talvez isto lhe interesse:

http://scriptbrasil.com.br/forum/index.php?showtopic=96923

* Com esse código é possível gerar o arquivo com qualquer nome. ;)

Lembrando que nem todos os navegadores abrirão arquivos PDF, por exemplo. Arquivos DOC também não poderão ser executados. A melhor maneira, ao meu ver, é forçar o download mesmo.

Abraços,

Beraldo

Share this post


Link to post
Share on other sites
  • 0

Olá,

Eu fiz varios sistemas destes protegendo conteudos

Uma tabela MySql

nela tem apenas

id

descrição do documento (o usuario digita uma forma facil de identificar)

nome_arq (Nome do arquivo)

os arquivos são enviados por upload..

bem até ai normal.. o que fiz foi criar um diretorio fora da area da internet,

digamos que a estrutura do servidor onde esteja suas paginas seja : /home/public_html/**suas paginas aqui**

os arquivos protegidos ficam um nivel abaixo do public, que somente via script ou ftp se tem acesso

/home/arquivos (modo de escrita no diretorio arquivos)

o resto é programação.. faz o upload indicando acima

e faz um Download pelo php apontando para o diretorio e nome já armazenado.

muito simples e 100% seguro, ninguém tem acesso a estes arquivos a não ser como falei pelo FTP

espero que a receitinha ai ajude..

Jair

Share this post


Link to post
Share on other sites
  • 0

Oi, Jair.

Obrigada pela ajuda, mas neste caso específico, realmente tem que ser aberto pelo browser.

De qualquer forma, vou gravar sua idéia na máquina, para quando eu precisar...

Bem, quanto ao código do Beraldo, parece-me que atende ao que preciso, mas tenho uma dúvida, Beraldo: você diz que é necessário utilizar o PHP 5, há como eu adequar o código para o PHP 4?

É que o cliente não quer mudar de servidor e lá só dispõe do PHP 4.

Obrigada a todos pela ajuda.

Abraços,

Damy

Share this post


Link to post
Share on other sites
  • 0

A ideia é a mesma que a do beraldo, unicas diferenças que no que ele colocou armazena em Array os que uso armazeno os nomes dentro de um MySql

o resto é a mesma coisa..

só não coloque os arquivos dentro da area da internet, coloque sempre um vivel abaixo antes do public_html ou www ou html depende do seu servidor , mas sempre antes das paginas

voce tentou rodar ele no php4, acho que vai funcionar sem maiores problemas, se der erro passe a função que arrumamos alternativas para usar no 4

Jair

Share this post


Link to post
Share on other sites
  • 0

Oi, Jair.

Então, no servidor, o acesso é liberado só a partir do "public_html".

Mas fiquei na dúvida, pensei que da forma que você expôs não fosse possível acessar pelo browser... mas, então, é, sim?

Bem, tive que iniciar um outro projeto dentro do site, mas assim que conseguir, vou testar esse código pra ver se dá certo, aí posto aqui o resultado.

Obrigada novamente!

Share this post


Link to post
Share on other sites
  • 0

se voce ver o public consegue criar um diretorio, se não não vai adiantar muito proteger desta forma se alguém conhecer um pouquinho descobre o caminho, até com uma pesquisa pelo google vai achar

e sim, fica totalmente impossivel de se acessar via http:// a não ser que seja via sistema, é 100% seguro

porem precisaria ter acesso a criar um diretorio no mesmo nivel do public_html

Share this post


Link to post
Share on other sites
  • 0

Então, é que realmente ele já abre no public, não tenho acesso anterior.

Também preciso que os arquivos sejam abertos no browser, já que será usado na máquina dos clientes e por pessoas leigas em computador e internet.

Share this post


Link to post
Share on other sites
  • 0

mas se fizer da forma que o beraldo falou criará links, então é só a pessoa clicar e baixar fica facil..

mas não muito protegido que vai estar em uma area publica do Site

Share this post


Link to post
Share on other sites
  • 0

Damy, eu disse que é voltado para o PHP 5 pois a classe de Login (não postada no tópico) foi feita para essa versão do PHP, mas os códigos que postei naquele tópico rodam normalmente no PHP 4.

Como o Jair disse, eu usei array, mas é possível automatizar isso, usando banco de dados e tal. Eu usei array somente parra mostrar a essência da idéia.

Criar um diretório fora do public_html é outra boa saída, mas se você não tiver permissão para criar outros diretórios fora do public, aí creio que a minha sugestão "cairá" bem.

Abraços,

Beraldo

Share this post


Link to post
Share on other sites
  • 0

Pessoal do fórum, seguinte, tive uma idéia um tanto mirrabolante, não sei se funciona e essa semana não vou ter tempo de tentar fazer, fim de semana vou tentar, vai ser útil para mim também.

A idéia é a seguinte:

1 - É feito o upload do arquivo teste.zip por exemplo, grava isso no servidor com o nome teste.php. Feito o upload.

Este arquivo é aberto, e adicionado no início dele as linhas de validação de usuário e senha, com sessões por exemplo.

Se não validar... redireciona para algum lugar que diga que ele não está autorizado

e linhas para redirecionar para um checa_correspondente.php enviando por uma outra sessão o nome do arquivo "teste.php"

2 - É gravado no banco de dados o nome do arquivo original "teste.zip" e do arquivo correspondente "teste.php"

Os arquivos podem estar no diretório público do servidor, normal.

Quando alguém abre

Pessoal do fórum, seguinte, tive uma idéia um tanto mirrabolante, não sei se funciona e essa semana não vou ter tempo de tentar fazer, fim de semana vou tentar, vai ser útil para mim também.

A idéia é a seguinte:

1 - É feito o upload do arquivo teste.zip por exemplo, grava isso no servidor com o nome teste.php. Feito o upload.

Este arquivo é aberto, e adicionado no início dele as linhas de validação de usuário e senha, com sessões por exemplo, com um algoritimo mais ou menos assim:

Se não validar... redireciona para algum lugar que diga que ele não está autorizado

Se validar ...

redirecionar para um checa_correspondente.php enviando por uma outra sessão o nome do arquivo "teste.php"

beleza, feito o upload e o arquivo tratado.

2 - É gravado no banco de dados o nome do arquivo original "teste.zip" e do arquivo correspondente "teste.php"

Os arquivos podem estar no diretório público do servidor, normal.

O que eu espero é que como teste.php é um arquivo php, ele vai ser interpretado, e não aberto diretamente, espero que isso aconteça, se funcionar ... show de bola!

Quando alguém abre www.site.com.br/teste.php e não passou por login, redireciona para um lugar que diz que ele não está autorizado.

Quando abrir este endereço e tiver autorizado, redireciona para o " checa_correspondente.php", mandando por uma sessão o valor "teste.php"

este valor vai ser checado no banco de dados e assim descoberto que este arquivo é o "teste.zip"

então é lido o arquivo teste.php (usando fopen, fread ...) e copiado do arquivo tudo menos as linhas php, o que podia se feito usando fread e depois um explode por "?>" (tem que testar)

Essa string resultante (o arquivo original) então é gravada em um arquivo "teste.zip" e se redireciona para este arquivo, aí como é .zip o navegador vai pedir para fazer download.

O problema disso é que em algum momento vai ter que ser apagado o arquivo "teste.zip"

Não sei em que momento exato fazer isso.

Bom se isso tudo funcionar, show! (mas ficou complicadinho ...) se não ... tem que colocar em um diretório não público (um nível acima de www ou de public_html).

Fim de semana, ou antes quando der vou testar isso.

Espero que tenha algum fundamento a idéia e que funcione.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this