Jump to content
Thiago Moreira

[Resolvido] Sistema de login seguro

Recommended Posts

Fabyo, primeiramente parabéns pelo tutorial está ótimo.

 

Minha duvida é a seguinte, como posso criar uma classe ou arquivo de validação para as permissões.

 

Ex: Permissão = 1 Exibe menu "menu_usuario.php".

Permissão = 2 Exibe menu "menu_usuario_vip.php".

Permissão = 3 Exibe menu "menu_admin.php".

 

Onde o menu_admin.php somente poderá ser exibido por quem ter permissão, caso usuário tente acessa-lo diretamente aparece mensagem de ação negada por motivo de permissão.

 

Grato,

Vagner

Share this post


Link to post
Share on other sites

Bem...

para o vagninho99 basta usar o array 'dados' que fica armazenado na sessao para setar o nivel de permissao e fazer a checagem em um swith ou ifs mesmo...

para o Raniel basta voce criar dois campos a mais na tabela do usuario, esse campo seria o client_addr como um inteiro para armazenar os 4 bytes do IP (armazenar o Integer formado pela uniao dos 4 octais do IPv4 ao inves da String contendo o IP inteiro, é que o Integer é rapido para ser filtrado ou comparado) e last_activity com o tipo Time (ou um long para guardar o timestamp). Esses dois campos voce atualiza cada vez que o cliente logado tiver acessando do mesmo client_addr e como a last_activity menor que um determinado limite, caso um acesso seja feito com um client_addr diferente voce mostra o aviso, caso last_activity seja maior que o limite, voce desloga ele do servidor realizando a limpeza do campo client_addr... essa é uma maneira simples porem funcional de fazer oque voce esta querendo...

agora para os dois... esses sao problemas velhos, existem muitas solucoes na internet, principalmente para algo trivial como o do vagninho99... procurem no Google antes de perguntarem algo, pois certamente outras pessoas ja tiveram o mesmo problema que o seu e ja tem a solucao disponivel...

Imagem Postada PS para os Admins: cade o emotion com a plaquinha do Google que tinha antes?! oO ... era firme :P/>

[]'s

Edited by Mário Monteiro

Share this post


Link to post
Share on other sites

Olá pessoal.

 

Cheguei neste post a poucos dias e achei bem legal o sistema.

 

Baixei e fiz alguns testes e me deparei com o mesmo problema que alguns aqui relataram. Ao tentar acessar o sistema, o acesso não era feito e retornava para o arquivo login.html. Descobri que este problema está nos selects. A utilização do md5 para criptografar a senha não dá certo e acaba retornando o inverso do que os ifs estão verificando.

 

Solução:

Alterem para estas linhas...

$sql = sprintf("select count(*) from usuarios where login = '%s' and senha = '%s'", $nome, $senha);

$re = mysql_query("select * from usuarios where login = '$nome' and senha = '$senha'") or die(mysql_error());

 

Até mais.

Tiago

Share this post


Link to post
Share on other sites

Ola Tiago, primeiramente apenas lembrando que md5 nao é criptografia e sim um hash, em segundo lugar, o codigo do Fabyo esta certo nesse ponto, nao é necessario alterar. O problema é que acontece de a funcao md5 usada dentro de um comando SQL no MySQL ter um valor diferente para o mesmo valor que for passado para a funcao md5 do PHP. Entao voce deve ter usado o md5 do PHP para gerar o hash da senha e armazenado no database, porem voce deve usar o md5 do MySQL, ou usar a funcao do PHP nas duas situacoes. Outra coisa que vale a pena observar é que voce deve dar o mesmo tratamento nas variaveis tanto na hora de cadastrar quanto na hora de logar, por exemplo, o Fabyo criou a funcao limpa() para tratar as variaveis na hora de login, entao voce deve aplicar o mesmo tratamento da hora de pegar as variaveis para cadastrar no database.

Abraços

Edited by Matias Rezende
Retirada de Quote desnecessário

Share this post


Link to post
Share on other sites

Legal o sistema do Fabyo,

Baixei aqui e já vou utilizar no meu sistema! :D/>

 

Valeu cara pela disponibilidade!

Edited by Mário Monteiro

Share this post


Link to post
Share on other sites

Estou tento problemas nessa linha aqui:

 

if($resultado["nivel_acesso"] > 0){

$dados = array();

$dados["nome"] = $nome;

$dados["senha"] = $senha;

$_SESSION["dados"] = $dados;

 

 

Quando eu tento fazer o login aparece esse erro:

 

Notice: Undefined index: nivel_acesso in (Aqui tá o endereço) on line 29!

 

A linha 29 corresponde a essa parte ai em cima!

Share this post


Link to post
Share on other sites

Desculpe estar retomando esse tópico, mais gostaria de saber como faria para gravar a passagem do usuário com data e hora assim que ele logasse na tela...

Vlw....

Share this post


Link to post
Share on other sites

olha me aperece isso Table 'sandersi_login.usuarios' doesn't exist como crio a tabela no meu banco de dados? e pq tem a sql sistema na pasta db? eu editei o config e mudei a parte "BANCO" para "BANCO", "sandersi_login" que é o nome de meu banco de dados, a final como que crio atabela usuarios em meu banco de daos, explica ae, e ainda falta a pagina cadastrar......... vlw

Edited by William Bruno
Remover quote desnecessário

Share this post


Link to post
Share on other sites

rapa esse topico já é um vovô kkkkkk..

2007 =X

 

você num crio a tabela 'usuarios'

 

tem 3 campos pelo visto do codigo (id, nome, senha);

Share this post


Link to post
Share on other sites

Fabyo, apesar deste tópico ser muito antigo o achei muito interessante, show de bola.

Seu código do arquivo "init.php" me será muito útil.

Já usava alguns itens que você aborda nele e outros não.

 

Minha dúvida fica neste trecho do código

//pego o conteudo do include_path e ainda incluo mais paths, muito util para o sistema
set_include_path('.' . PATH_SEPARATOR . BASEPATH . 'includes'
       . PATH_SEPARATOR . BASEPATH . 'classes'
       . PATH_SEPARATOR . get_include_path());

// se formos usar classes elas nao precisaram ser incluidas nos scripts só estanciadas.
function __autoload($classe){
       require_once $classe.".php";    
}
//adiciono o arquivo de configuração
if (file_exists(BASEPATH . "config.php")){
       require_once BASEPATH . "config.php";
} else {
       die("Erro: Arquivo config.php nao localizado");
}       
//http://br.php.net/manual/pt_BR/function.clearstatcache.php
clearstatcache();

 

Não entendi como usar o trecho de código acima.

 

 

Acredito também que neste período todo de 2007 até 2012 esse código já tenha sofrido alterações, você poderia compartilhar ele conosco novamente?

 

Também me deparei com este post do Thiago Belem http://blog.thiagobelem.net/instalando-o-phpids-no-seu-site/ e pergunto, o PHPIDS substitui esse init.php? ou uso ambos simultaneamente?

 

Abraços e parabéns pelo post!

Share this post


Link to post
Share on other sites

o quê não conseguiu entender desse script ?

as constantes ?

 

o autoload ?

 

??

 

 

Também me deparei com este post do Thiago Belem http://blog.thiagobe...ds-no-seu-site/ e pergunto, o PHPIDS substitui esse init.php? ou uso ambos simultaneamente?

não

 

as finalidades são diferentes...

 

o código do ini.php desse tutorial é um bootstrap... como o p'roprio nome do arquivo sugere, um arquivo de inicialização do ambiente..

PHPID está bem claro e definido no site do Thiago... é um filtro contra injeções de comandos nos parâmetros

Share this post


Link to post
Share on other sites

Pra criptografar a senha, pra deixar mais difícil para um hacker, eu geralmente faço isso:

$senha=md5(hash('sha512', $_POST['senha']));

Porque só o com o md5 fica fácil, pois já existem sites e dicionários para decodificar esses códigos.

Edited by Gabriel Jacinto

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.