Ir para conteúdo
Fórum Script Brasil
  • 0

Area Restrita Com Vários Logins E Senhas


damy

Pergunta

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

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 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?

Link para o comentário
Compartilhar em outros 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).

Link para o comentário
Compartilhar em outros 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

Editado por damy
Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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!

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...