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 cigo 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!
December 22nd, 2006 at 11:15 am
Para quem quiser conferir no PHP Brasil também:
http://www.phpbrasil.com/articles/article.php/id/1402
January 2nd, 2007 at 11:19 am
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!
November 26th, 2007 at 8:28 am
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.
November 26th, 2007 at 8:48 am
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
November 26th, 2007 at 10:43 am
Como faço p/ baixar o PHPMyAdmin
November 26th, 2007 at 11:09 am
Vem no pacote do vertrigo como te falei!
November 26th, 2007 at 3:37 pm
E onde encontro este “Vertrigo” Por favor.
November 27th, 2007 at 4:18 am
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!
November 30th, 2007 at 5:47 am
Andrey Pedro gostaria de saber como criar um Banco de Dados. Passo-a-Passo.
December 19th, 2007 at 4:48 am
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
February 20th, 2008 at 8:19 am
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
April 10th, 2008 at 12:38 pm
Valeu era o que estava faltando em meu codigo
valeu msm
May 16th, 2008 at 3:15 am
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.
May 16th, 2008 at 1:41 pm
Blza Leo!
Cara tenta root sem senha ou root root
July 2nd, 2008 at 9:51 am
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
July 2nd, 2008 at 1:04 pm
olá… provavelmente não está colocando entre aspas o valor da variável que está vindo do campo de usuário.
Manda o SQL =)
September 2nd, 2008 at 10:01 pm
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.
September 2nd, 2008 at 10:10 pm
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
September 3rd, 2008 at 7:42 pm
Esse código que não entendi de onde vc tirou, esse tbm é auto increment???
baf22ddb7b1a317d860f48638254e2e9
September 3rd, 2008 at 7:43 pm
no caso ele seria a senha do usuario, incluida na tabela???
September 3rd, 2008 at 8:02 pm
isso aquela é a senha criptografada
MD5 da uma pesquisada sobre que vc vai entender melhor do que se trata