Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Agora pouco criei um topico perguntando sobre a segurança do meu sistema de login.
Parece que tá legal até agora.. Com a ajuda do Beraldo, implementei o md5 nas senhas salvas no banco.
Certo, agora meu proximo passo, seria "RENOVAR A SENHA", eu montei um script aqui e está funcionando.. Ele envia email para a pessoa cadastrada com a senha ainda nao criptografada, passo o md5 e salvo no banco, o email chega tudo certo e tudo funciona. Mas minha preocupação são falhas e vulnerabilidades, nao quero fazer algo ruim para depois ter que ficar ouvindo dos outros e ter tempo jogado no lixo..
Queria que analisassem o codigo e apenas falar se está bom ou o que podemos melhorar, quem quiser utilizar também, fique a vontade.
formulario-recupera.php
<form action="config/recuperar_senha.php" method="post">
E-mail:
<input name="email" type="text" class="form-login" size="30" maxlength="100" required>
<br><br>
<input type="submit" value="Enviar" class="submit_login">
</form>
config/recuperar_senha.php
<meta charset="iso-8859-1">
<?php
include "conexao.php";
include "func.php";
$email = anti_injection($_POST['email']);
$sql_pesq = mysql_query("SELECT * FROM perfil WHERE email = '$email'");
$verifica = mysql_num_rows($sql_pesq);
if ($verifica == 0) {
// E-mail não encontrado
?>
<H2>E-mail inválido!</H2>
Desculpe, mas o e-mail solicitado não é cadastrado.<br>
<br><br>
<br>
Entre em contato com o administrador do sistema.<br>
Se quiser tentar novamente, <a href="../">clique aqui</a>.
<br><br>
Obrigado.
<?php
} else {
$linha = mysql_fetch_array($sql_pesq);
// inclue os dados do usuario em variaveis
$id_usuario = $linha['id_usuario'];
$nome = $linha['nome'];
$usuario = $linha['usuario'];
// gera uma nova senha aleatoria
$novasenha = geraSenha(9, true, false);
$senhamd5 = md5($novasenha);
// salva a nova senha md5 no banco
$query = "UPDATE perfil SET
senha = '$senhamd5'
where id_usuario = ".$id_usuario;
$rs = mysql_query($query);
$formato = "\nContent-type: text/html";
$msg = "Olá, $nome. Recebemos uma solicitação para renovar sua senha.<br><br>";
$msg .= "Seu usuario: <strong>$usuario</strong><br>";
$msg .= "Sua <strong>nova</strong> senha: <strong>$novasenha</strong><br><br>";
$msg .= "Caso não tenha solicitado esta ação. Acesse a sua conta e altere sua senha novamente.<br>";
$msg .= "<br>";
$msg .= "Obrigado.<br>";
mail("$email","Nova Senha","$msg", "From: Sistema <sistema@sistema.com> ".$formato);
// E-mail enviado
?>
<H2>Senha enviada!</H2><br>
Após verificar seu e-mail, retorne à página de login.<br>
Se preferir, <a href="../">clique aqui</a>.
<br><br><?php
}
?>
func.php (funcoes de geraSenha e anti_injection)
<?php
// função anti sql injection
function anti_injection($sql)
{
// remove palavras que contenham sintaxe sql
$sql = mysql_real_escape_string($sql);
$sql = trim($sql);//limpa espaços vazio
$sql = strip_tags($sql);//tira tags html e php
if (!get_magic_quotes_gpc()) {
$sql = addslashes($sql);//Adiciona barras invertidas a uma string
}
return $sql;
}
/ Função para gerar senhas aleatórias /
function geraSenha($tamanho = 8, $maiusculas = true, $numeros = true, $simbolos = false)
{
$lmin = 'abcdefghijklmnopqrstuvwxyz';
$lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$num = '1234567890';
$simb = '!@#$%*-';
$retorno = '';
$caracteres = '';
$caracteres .= $lmin;
if ($maiusculas) $caracteres .= $lmai;
if ($numeros) $caracteres .= $num;
if ($simbolos) $caracteres .= $simb;
$len = strlen($caracteres);
for ($n = 1; $n <= $tamanho; $n++) {
$rand = mt_rand(1, $len);
$retorno .= $caracteres[$rand-1];
}
return $retorno;
}
?>
Então é isso pessoal..
Poderiam dar suas sugestões?
Obrigado!
Carregando comentários...