Jump to content


Photo

Gerenciamento De Grupos E Permissões Via Script


  • Faça o login para participar
7 replies to this topic

#1 Massa

Massa

    Turista

  • Usuários
  • 54 posts
  • Sexo:Não informado

Posted 02/02/2008, 17:03

Desenvolvi um web-site em PHP com gerenciamento de usuários e acesso a areas restritas através de login , que aparentemente funciona muito bem.

Os usuários cadastrados são armazenados no MYSQL com diversas informações como Nome , Senha , último Ip , data do último acesso , local do Site , logado ou não logado ,...etc...

O "Causo" é o seguinte.

Supunhetemos que em determinada área restrita deste site haja uma imagem , ou um arquivo para download que só devam ser vistas ou acessadas pelos usuários registrados e logados

Consigo através de Session permitir ou não permitir o acesso A PÁGINA que contem estas (imagens ou arquivos) , mas se um usuário comum não registrado souber a URL da Imagem , ou do arquivo a ser baixado , ela conseguira visualizar ou efetuar o download , uma vez que não será filtrada por nenhum script php. O Acesso será direto !

O pouco que eu sei , e que acredito ser a solução uma vez que não manjo do sistema de gerenciamento de arquivos nos web-servers , ... é que através do cpanel do provedor de hospedagem posso restringir o acesso a estes arquivos criando grupos e protegendo os diretórios MANUALMENTE ,... o que consegui fazer foi criar um grupo e acrescentar usuários manualmente

, MAS A PERGUNTA É:

COMO FAÇO PARA INTERAGIR os dados de mues usuários registradosno Mysql A ESTES GRUPOS ATRAVÉS DO PHP , ou melhor , aos arquivos .htacess GERADOS afim de consegir administrar o acesso através de meus scripts PHP.

- Já utilizo CHMOD em outros scripts do site (para upload de imagens - gerenciamento de conteudo dinâmico) e acredito ter entendido o seu funcionamento e sua lógica.
- Pesquisei sobre CHGRP , mas não entendi patavinas.

Alguém poderia me dar uma Luz ?

Abraço a todos
Marcos

Edição feita por: Massa, 02/02/2008, 17:04.


#2 Rogerio Lamarques

Rogerio Lamarques

    Novato no fórum

  • Usuários
  • 13 posts
  • Sexo:Masculino
  • Localidade:Rio Grande do Sul
  • Interesses:Desenvolvimento PHP+ MySQL<br />Novidade Flash

Posted 02/02/2008, 20:31

Cara!
use um campo de administração nos usuários do site.
com isso duranto o login você poderá criar mais uma variável de sessão.
na conferência dessas páginas fechadas acertos usuário use essa variável para conferir o usuário e se caso não der positivo aos usuários permitidos redirecione para outra url.


se precisar estamos aí. :)
Aberta as inscrições para Formação Desenvolvedor PHP em Dois Irmãos/RS
Saiba mais com rogerio.lamarques@gmail.com

#3 Massa

Massa

    Turista

  • Usuários
  • 54 posts
  • Sexo:Não informado

Posted 03/02/2008, 08:23

Acho que não fui muito claro.

Consigo redirecionar perfeitamente os usuários não registrados , quando eles tentam acessar por ex:
www.meusite.com.br/conteudo_so_para_registrados.php

Quando o login e senha não conferem , os redireciono através de header('Location:') para
www.meusite.com.br/conteudo_para_visitantes.php

Até aqui não existem problemas

O Problema é que em conteudo_so_para_registrados.php existem imagens e arquivos para download que também devem ser restritos a usuários registrados.

Daí , se um Visitante usar a URL: www.meusite.com.br/images/imagem_so_para_registrado.jpg (que é por exemplo uma destas imagens) , ele vai visualizar a imagem no navegador ,.... ou se ele usar a URL: www.meusite.com.br/download/arquivo.zip (que é um destes arquivos para download) , ele fará o download mesmo sendo visitante.

ESSE é o problema que preciso contornar !!!
Acesso Direto a URL (de arquivos que são exclusivos a registrados) por Visitantes

Preciso gerenciar as permissões e os Grupos que terão acesso aos diretórios /images e /download através de Script PHP , interagindo minha tabela Mysql de usuários registrados ao grupo que terá permissão de leitura dos arquivos contidos nestas pastas.

Acho que agora Ficou claro.

Alguém Mais ?!

#4 DarkSign

DarkSign

    Doutor

  • Usuários
  • 868 posts
  • Sexo:Masculino
  • Localidade:Brasil
  • Interesses:Tecnologias na área WEB em geral e desenvolvimento.

Posted 26/02/2008, 16:30

não entendo muito disso, mas eu tenho uma idéia de que é possível se fazer algo do tipo:

o endereço direto fica www.seusite.com/download.zip por exemplo

e se você fizer uma página download.php, que verifica uma querystring file=arquivo, e, no script da página, ficaria algo assim:

//Você coloca o modo como vc checa os usuários aqui, se liberar, roda o codigo abaixo
$arquivo=$_GET[´file´];
$arquivo=$arquivo.".zip";
$download="www.seusite.com/".$arquivo;
header("location:$download");

Não sei se deu pra entender. Mas, tipo assim, o que acontecerá será você chamar uma página da forma
<a href="download.php?file=teste">baixe aqui</a>

Ou você pode mascarar esse ?file com alguma das técnicas já apresentadas neste fórum.

Se você perceber, com a autenticação, se alguém tentar www.seusite.com/download.php?file=teste, e n for registrado, receberá o erro e retornará à página de visitantes. Claro, pra dificultar, você poderia deixar numa pasta tipo 45875164files XDD
Ae o registrado que passase o endereço pra alguem n saberia da onde estaria puxando o arquivo

Espero ter ajudado, mesmo com meu pouco conhecimento

Flws!

PS:desculpem. gosto de usuar variáveis separadas xD sei que daria pra montar a variável $download diretamente.
Não sabe por onde começar? Que tal pelas Regras ?

#5 Massa

Massa

    Turista

  • Usuários
  • 54 posts
  • Sexo:Não informado

Posted 02/03/2008, 22:58

não entendo muito disso, mas eu tenho uma idéia de que é possível se fazer algo do tipo:

o endereço direto fica www.seusite.com/download.zip por exemplo

e se você fizer uma página download.php, que verifica uma querystring file=arquivo, e, no script da página, ficaria algo assim:

//Você coloca o modo como vc checa os usuários aqui, se liberar, roda o codigo abaixo
$arquivo=$_GET[´file´];
$arquivo=$arquivo.".zip";
$download="www.seusite.com/".$arquivo;
header("location:$download");

Não sei se deu pra entender. Mas, tipo assim, o que acontecerá será você chamar uma página da forma
<a href="download.php?file=teste">baixe aqui</a>

Ou você pode mascarar esse ?file com alguma das técnicas já apresentadas neste fórum.

Se você perceber, com a autenticação, se alguém tentar www.seusite.com/download.php?file=teste, e n for registrado, receberá o erro e retornará à página de visitantes. Claro, pra dificultar, você poderia deixar numa pasta tipo 45875164files XDD
Ae o registrado que passase o endereço pra alguem n saberia da onde estaria puxando o arquivo

Espero ter ajudado, mesmo com meu pouco conhecimento

Flws!

PS:desculpem. gosto de usuar variáveis separadas xD sei que daria pra montar a variável $download diretamente.


Amigo , obrigado pela ajuda , MAS Isso que vc. está me dizendo eu já fiz e Funciona !!!

O problema não é este !!!

Parafrazeando seu post , se o Usuário digitar www.seusite.com.br/teste.zip , ELE TEM ACESSO AO ARQUIVO ZIP SEM PASSAR POR NENHUM SCRIPT de validação PHP !!!!

Então tenho que brincar com as permissões do servidor , grupos e usuários do Servidor , mas quero fazer isso via PHP.

Resumindo: se alguém tiver um tuto para trabalhar com .htacess via Script PHP eu agradeço IMENSAMENTE !!!

Abs.
Massa

#6 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 03/03/2008, 11:36

Na verdade .htacess nao passa via PHP O.o

A request vai pro apache, que dae passa pelo htacess e retorna para o apache e dai sim para o php ;)

Pode olhar este link, aqui tem uma boa referência para o seu problema: LINK

Em tempo: HTTP authentication with PHP

[]'s

Edição feita por: savior, 03/03/2008, 11:37.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#7 Massa

Massa

    Turista

  • Usuários
  • 54 posts
  • Sexo:Não informado

Posted 03/03/2008, 19:18

Na verdade .htacess nao passa via PHP O.o

A request vai pro apache, que dae passa pelo htacess e retorna para o apache e dai sim para o php ;)

Pode olhar este link, aqui tem uma boa referência para o seu problema: LINK

Em tempo: HTTP authentication with PHP

[]'s


Valeu !!!!!!!!

Abs.
Massa

#8 Massa

Massa

    Turista

  • Usuários
  • 54 posts
  • Sexo:Não informado

Posted 21/03/2008, 10:14

Bem , desenvolvi uma solução que atende minha necessidade e resolvi compartilhar com vcs , uma vez que este "problema" pode ser comum a outros usuários

Arquivo .htaccess (deve estar dentro da pasta que vai conter as imagens que devem ser restritas a usuários logados) , nos exemplos abaixo , deve estar dentro da pasta images
# Bloqueia o acesso a arquivos gif, jpg, jpeg, bmp, png 
<FilesMatch "\.(gif|jpe?g|bmp|png)$">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>

Arquivo filtra_imagem.php (arquivo responsável por ler a imagem e exibila quando o usuário estiver logado) e deve estar no mesmo nível do arquivo que o chama , que é pagina.php
<?php
$caminho_e_imagem = explode ('&',$_SERVER['QUERY_STRING']);

define('MAX_WIDTH', 200); 
define('MAX_HEIGHT', 150);

// Pega onde está a imagem 
$image_file = str_replace('..', '', $caminho_e_imagem[0]); 
$image_path = str_replace('..', '', $caminho_e_imagem[1]).$image_file;

if ($extensao == 'jpg' || $extensao == 'jpeg')
{ $img = @imagecreatefromjpeg($image_path); }
else if ($extensao == 'png')
{ 
	$img = @imagecreatefrompng($image_path); 
	// Se a versão do GD incluir suporte a GIF, mostra... 
}
elseif ($extensao == 'gif')
{$img = @imagecreatefromgif($image_path);}

// Carrega a imagem 
$img = null; 

$extensao = strtolower(end(explode('.',$image_path))); 

if ($extensao == 'jpg' || $extensao == 'jpeg')
{ $img = @imagecreatefromjpeg($image_path); }
else if ($extensao == 'png')
{ 
	$img = @imagecreatefrompng($image_path); 
	// Se a versão do GD incluir suporte a GIF, mostra... 
}
elseif ($extensao == 'gif')
{$img = @imagecreatefromgif($image_path);} 

// Cria uma imagem de erro se necessário 
if (!$img OR $_SESSION['logado'] != 1)
{ 
	$img = imagecreate(MAX_WIDTH, MAX_HEIGHT); 
	imagecolorallocate($img, 204, 204, 204); 
	$c = imagecolorallocate($img, 153, 153, 153); 
	$c1 = imagecolorallocate($img, 0, 0, 0); 
	imageline($img, 0, 0, MAX_WIDTH, MAX_HEIGHT, $c); 
	imageline($img, MAX_WIDTH, 0, 0, MAX_HEIGHT, $c); 
	if($image_file == 'faca_login.jpg' OR $_SESSION['logado'] != 1)
	{imagestring($img, 2, 9, 55, 'Faça o Login para ver a Imagem', $c1);}
	else
	{imagestring($img, 2, 12, 55, 'Imagem solicitada não exixte', $c1);}
} 

// Mostra a imagem 
header('Content-type: image/jpeg'); 
imagejpeg($img); 
?>

E por fim , sua pagina pagina.php onde deveriam estar as url's que mostram as imagens
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
// se estiver logado mostra a imagem
if($_SESSION['logado'] == 1)
{echo "<img border=\"0\" src=\"filtra_imagem.php?foto.jpg&amp;images/\">";}
else
{echo "<img border=\"0\" src=\"filtra_imagem.php?faca_login.jpg&amp;images/\">";}
?>
</body>
</html>

onde foto.jpg é a imagem que será exibida só para usuários logados e está localizada dentro da pasta images

Abs.
Massa

Edição feita por: Massa, 21/03/2008, 10:20.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq