PHP - Validação de senha simples e segura!


Hoje vou mostrar como montar uma área de login e senha e como validar isso no php de forma segura.

Primeiramente vamos começar com o formulário:
Esse primeiro código é somente com HTML e estilos CSS.

<html>
<head>
<title>Área Restrita - Efetue seu login!</title>
<style>
body {
font:12px Verdana;
}

#caixaLogin {
text-align:center;
border:1px solid blue;
border-top:20px solid blue;
}

h1 {
font: 15px Verdana;
font-weight:bold;
}

#obs {
font:10px Verdana;
text-align:left;
margin:20px;
}

span {
border: 1px solid green;
background: #00FF00;
}
</style>
</head>
<body>
<form action=”" method=”post” name=”form”>
<div id=”caixaLogin”>
<h1>Realize seu Login para acessar nossa 疵ea restrita:</h1>
Login:<br />
<input type=”text” name=”login” /><br />
Senha:<br />
<input type=”text” name=”senha” /><br /><br />
<input type=”checkbox” value=”1″ name=”comSeguranca” /> Efetuar login com seguran軋?<br /><br />
<input type=”submit” name=”logar” value=”Logar” /><br /><br />
</div>
<div id=”obs”>
<strong>Obs.:</strong>
<br /><br />
O que ・efetuar login com seguran軋 nessa p疊ina?
<br /><br />
ノ remover todo cigo com intuito de “burlar” o sistema.
</div>
</form>
</body>
</html>

Obs.: Esse código estou reutilizando do POST de SQL Injection que fiz pouco tempo atrás!

Antes de mexer no PHP, vamos executar este SQL abaixo, para poder testar o form depois:
Para quem ainda é iniciante, abra o seu PHPMyAdmin crie um banco de dados chamado de test, acesse o banco e execute o SQL.
IMPORTANTE: Verifique se o Login e Senha de seu MySQL são “root” e “” respectivamente.

CREATE TABLE `usuario` (
`usuarioCodigo` int(11) NOT NULL,
`usuarioLogin` varchar(15) NOT NULL,
`usuarioSenha` varchar(32) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


– Extraindo dados da tabela `usuario`

INSERT INTO `usuario` (`usuarioCodigo`, `usuarioLogin`, `usuarioSenha`) VALUES (0, ‘andrey’, ‘baf22ddb7b1a317d860f48638254e2e9′),
(0, ‘teste’, ‘698dc19d489c4e4db73e28a713eab07b’);

Como o form está pronto, agora vamos a parte que interessa, a validação PHP.

<?php
/* Conectando ao banco */
mysql_connect(”localhost”,”root”,”");
mysql_select_db(”test”);
/* Fim conectando ao banco */

/*
Desenvolvedor: Andrey Pedro Lefkum
E-mail: andrey@andrey.eti.br
Site: www.andrey.eti.br

Função do Arquivo: Demonstrar como fazer um sistema de login seguro!
*/

function removerCodigoMalicioso($comSeguranca) {
$comSeguranca = addslashes($comSeguranca);
$comSeguranca = htmlspecialchars($comSeguranca);
$comSeguranca = str_replace(”SELECT”,”",$comSeguranca);
$comSeguranca = str_replace(”FROM”,”",$comSeguranca);
$comSeguranca = str_replace(”WHERE”,”",$comSeguranca);
$comSeguranca = str_replace(”INSERT”,”",$comSeguranca);
$comSeguranca = str_replace(”UPDATE”,”",$comSeguranca);
$comSeguranca = str_replace(”DELETE”,”",$comSeguranca);
$comSeguranca = str_replace(”DROP”,”",$comSeguranca);
$comSeguranca = str_replace(”DATABASE”,”",$comSeguranca);

return $comSeguranca;
}

if($_POST['logar']) {

$login = $_POST['login'];
$senha = $_POST['senha'];

$login = removerCodigoMalicioso($login);
$senha = removerCodigoMalicioso($senha);

$sql = ”
SELECT usuarioLogin
FROM usuario
WHERE usuarioLogin = ‘”.$login.”‘
AND usuarioSenha = ‘”.md5($senha).”‘
“;

$resultado = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($resultado) == 1) {
?>
<span>Logou no sistema!</span>
<?php
}
else {
?>
Erro ao tentar acessar o sistema, verifique seu LOGIN e SENHA!
<?php
}
}
?>

O Código está ai, mas o que ele faz realmente?
Esse código acima, remove todos os tipos de SQL Injection que poderia estar afetando o funcionamento normal do seu sistema de login. Todos os $_POST que são enviados pelo formulário passam pela função que faz a remoção de qualquer código malicioso.

Uma dica interessante seria obrigar o usuário a colocar pelo menos 6 caracteres, não deixar no login e senha repetir no campo “aaaaaa” ou sequencial como “123456″ ou “abcdef” e ainda sugerir ao usuário utilizar letras e números ao mesmo tempo.

—-

Quero agradecer ao Google Analytics que está indicando o que os visitantes do meu site querem ler e o que eles mais procuram na net. Resolvi escrever esse POST porque vi que muitos que busca algo pelo Google relacionado ao PHP são iniciantes, e nada melhor do que um sistema de LOGIN seguro, que é o que muita gente falha hoje em dia. Conheço empresas que estão fortes no mercado de software, que não tem essa preocupação, então diria que não seria somente para iniciantes, mas também para pessoas despreocupadas com as informações do PRÓXIMO!

;)
Valeu, espero que gostem do post!

21 Responses to “PHP - Validação de senha simples e segura!”

  1. Andrey Pedro Lefkum Says:

    Para quem quiser conferir no PHP Brasil também:

    http://www.phpbrasil.com/articles/article.php/id/1402

  2. Marta Says:

    Bom, eu ainda vou usar seu artigo, mas não vou comentar sobre ele agora. Estou comentando por você ter implorado em uma pop-up simpática, rs.

    Eu sou a pior webdesigner do universo e tenho consciência disso. E o mais bacana do seu site é que, de repente, eu estava num site de cursos de tableless online e, em outra aba do firefox, descobrindo que o Ubuntu é Linux para Seres Humanos, hahaha.

    Sites como o seu trazem a esperança de uma web descente em pouco tempo. Parabéns pela iniciativa!

  3. Joaquim Says:

    Olá. Gostaria que você mandasse p/ o meu E-mail primeiramente como se cria um Banco de Dados (…abra o seu PHPMyAdmin crie um banco de dados chamado de test, acesse o banco e execute o SQL).

    É que não tenho conta neste PHPMyadmin por isso gostaria de saber como obter uma conta neste Site, ou coisa parecida.

    Obrigado, aguardo respostas.

  4. Andrey Pedro Lefkum Says:

    olá Joaquim,

    bom vamos lá… PHPMyAdmin é software free desenvolvido em PHP para acessar o MySQL e manipulá-lo.

    Para instalar ele em sua máquina você poderá utilizar um pacote chamado “vertrigo”… esse pacote contém (php, mysql, apache e phpmyadmin)… ou seja, um interpretador da linguagem php, o banco de dados, o servidor http e o phpmyadmin que é o SGDB (Sistema Gerenciador de Banco de Dados).

    Após instalar esse pacote, rode o software vertrigo.exe e acesse em seu brownser http://localhost/phpmyadmin vai solicitar uma senha (talvez não dependendo da versão que instalar), caso solicite entre na pasta onde está instalado o software (pacote) e abra os arquivos .txt em um deles tem a senha de acesso.

    Acessando o phpmyadmin… já abre na primeira tela um campo e um botão para criar um banco de dados… digita o nome do banco de dados, e clica nesse botão… bom… a partir dai vc já tem um banco de dados…

    Agora … para criação de tabelas e campos peço que de uma pesquisadinha no google para entender melhor como funciona esse processo, uma vez que não é somente criar tabelas e campos, é necessário também preocupar-se com índices entre outras ferramentas que deixam seu software com uma ótima performance.

    Certo?
    Até mais…
    Andrey

  5. Joaquim Says:

    Como faço p/ baixar o PHPMyAdmin

  6. Andrey Pedro Lefkum Says:

    Vem no pacote do vertrigo como te falei!

  7. Joaquim Says:

    E onde encontro este “Vertrigo” Por favor.

  8. Andrey Pedro Lefkum Says:

    Vários locais =D
    Na primeiro link do resultado do google acessado hoje s 9:18 do dia 27 de novembro de 2007:

    http://www.google.com.br/search?q=vertrigo+download

    Ok?
    Até mais Joaquim!

  9. Joaquim Says:

    Andrey Pedro gostaria de saber como criar um Banco de Dados. Passo-a-Passo.

  10. Armando Ricardo Says:

    Pra que server os sites de buscas e os forums??? Pra mim existe um limite, pois Anrey já deu sua dica sobre Login Seguro. Não quero ser chato, mas dado o passo inicial, é preciso que o interessado faça consultas em forums e pesquise mais na internet. A internet é um livro aberto e sem fim de página.

    ProgramadorPHP

  11. Adilson Says:

    Ae guri. Contribuindo seu conhecimento com os meros mortais, parabéns. Estou iniciando, finalmente, minha caminhada na área de programação e vou encher um pouco o teu @#$%#$ para me ajudar, claro que antes de te perturbar vou pesquisar em foruns e no pai dos bu… o desconhecido google…. rss….
    Abraços e parabéns por sua iniciativa cara…

    Adilson

  12. Paulo Says:

    Valeu era o que estava faltando em meu codigo
    valeu msm

  13. Léo Says:

    Fala pessoal!
    Gostei da dica do Vertrigo!

    Porém, estou com uma dúvida: não consegui acessar o phpmyadmin, pois o usuário e senha padrão(root e vertrigo), não estão dando certo!
    Qdo abro o “localhost” percebo que há uma informação:
    MySQL password status (for root):
    The default MySQL password has been changed

    Mas eu não fiz alteração alguma!
    Alguém poderia me ajudar?
    Abraços.

  14. admin Says:

    Blza Leo!

    Cara tenta root sem senha ou root root

  15. Renildo Says:

    Estou testando o seu tutorial acima. Porém, ocorreu o seguinte erro:
    Unknown column ‘andrey’ in ‘where clause’
    O que poderia ser? Poderia me dar uma luz?
    Obrigado, Renildo

  16. admin Says:

    olá… provavelmente não está colocando entre aspas o valor da variável que está vindo do campo de usuário.

    Manda o SQL =)

  17. Vinicius Says:

    na verdade é mais uma pergunta
    sou iniciante e estou meio perdido, fiz o teste e deu certinho, mais minha dúvida e com os valores que vc inseriu na tabela.
    INSERT INTO `usuario` (`usuarioCodigo`, `usuarioLogin`, `usuarioSenha`) VALUES (0, ‘andrey’, ‘baf22ddb7b1a317d860f48638254e2e9′),
    sendo que 0=numero do usuario
    andrey=nome do usuario
    baf22ddb7b1a317d860f48638254e2e9=???
    e se esse conjunto de caracteres faz alguma relação ao nome, como faço pra descobir.
    Tentei alterar pra colocar outros usuarios e senhas, mais não ta dando certo. Se puder me dar uma luz fico muito agradecido.

  18. admin Says:

    Opa… Vinicius,

    não entendi o que você quis dizer cara…
    na real o código que coloquei 0 tem que ser auto incremento, ou seja, quem cria deve ser o sistema ;)

    =)
    Se puder explicar melhor =)

    abraço

  19. Vinicius Says:

    Esse código que não entendi de onde vc tirou, esse tbm é auto increment???
    baf22ddb7b1a317d860f48638254e2e9

  20. Vinicius Says:

    no caso ele seria a senha do usuario, incluida na tabela???

  21. Andrey Says:

    isso aquela é a senha criptografada ;)
    MD5 da uma pesquisada sobre que vc vai entender melhor do que se trata

Leave a Reply


This is a free Wordpress template provided by Mathew Browne | Web Design | SEO