Ir para conteúdo
Fórum Script Brasil
  • 0

Login...


OSJunior

Pergunta

Depois daquele ENORME tópico que criei, e a solução era simples, estou continuando com o sistema de login.

Aquela parte de cadastro era bem mais fácil, entretanto, o que estava incomodando era o próprio PHP.

Agora, para não parar de pertubá-los, como continuo? :

#Conexão com o banco de dados
mysql_connect("localhost","root","") or die("Erro:" .mysql_error());
mysql_select_db("sistemas") or die("Erro:" .mysql_error());
#Variáveis de recuperação
$usuario = $_POST["usuario"];
$senha = $_POST["senha"];
#Variáveis
$sql= "SELECT * FROM login WHERE usuario='$usuario' AND senha='$senha'";
.
.
.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Fiz aqui um simples...

<?
#Conexão com o banco de dados
mysql_connect("localhost","root","") or die("Erro:" .mysql_error());
mysql_select_db("sistemas") or die("Erro:" .mysql_error());
#Verifica o login e senha se conferem
$sql = mysql_query("SELECT * FROM login WHERE usuario='$usuario' AND senha='$senha'") or die(mysql_error());
#Traz o resultado da pesquisa acima
$contagem = mysql_num_rows($sql);
if ($contagem == 1) {
setcookie ("usuario", $usuario); //grava o cookie login
setcookie ("senha", $senha); //grava o cookie senha
header("Location: teste.php"); // entra na pagina restrita
} else {
echo "Login ou senha inválidos!"; //mensagem de erro de login
}
?>

*Não testei ^^

Link para o comentário
Compartilhar em outros sites

  • 0

sem quere ser chato mas esse sistema está muito simples e sem segurança ele aceita sql injection

outra dica use um cookie apenas para guardar os dados do usuario ou o que seja, já pensou um sistema de loja virtual quantos cookies o cara iria gravar para cada usuario, nossa iria ficar uma coisa feia de se manipular

faça assim para simplificar:

$dados = array();

$dados["usuario"] = $nome;

$dados["senha"] = $senha;

setcookie("dados", serialize($dados));

mas outra dica não precisa guardar a senha num cookie, o cookie é um meio seguro por isso basta testar se ele existe e pronto não precisa mais que isso

ah outra dica usando session ele serializa automaticamente não precisando usar a função

Link para o comentário
Compartilhar em outros sites

  • 0

Tem só redirecionar a pagina teste.php para a pagina inicial do seu site... ou coloca um echo para só aparecer uma msg e tal tipo:

echo "Você esta logado"; no lugar do header...

como eu disse, é simples teu script, da + segurança e tal ^^ usa md5() sei la...

Link para o comentário
Compartilhar em outros sites

  • 0
<?php
#Conexão com o banco de dados
mysql_connect("localhost","root","") or die("Erro:" .mysql_error());
mysql_select_db("sistemas") or die("Erro:" .mysql_error());
#Variáveis de recuperação
$usuario = $_POST["usuario"];
$senha = $_POST["senha"];
#Variáveis
$sql= "SELECT * FROM login WHERE usuario='$usuario' AND senha='$senha'";
#Condição de acesso
$contagem = mysql_num_rows($sql);
if ($contagem == 1) {
setcookie("usuario", $usuario);
header("Location: index.php");
} else {
echo "<b>Acesso restrito.</b>";
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

<?php
#Conexão com o banco de dados
mysql_connect("localhost","root","") or die("Erro:" .mysql_error());
mysql_select_db("sistemas") or die("Erro:" .mysql_error());
#NÃO PRECISA DISSO AQUI ENTÃO EXCLUA
$usuario = $_POST["usuario"]; //TIRA
$senha = $_POST["senha"]; //TIRA, HEHEHE
#Variáveis
$sql = mysql_query("SELECT * FROM login WHERE usuario = '$usuario' AND senha = '$senha'") or die(mysql_error()); //NÃO MUDA AQUI!
#Condição de acesso
$contagem = mysql_num_rows($sql);
if ($contagem == 1) {
setcookie("usuario", $usuario); // AQUI está ERRADO :D / TIRA E COLOCA O DE BAIXO

$dados = array();
$dados["usuario"] = $usuario; // COLOQUE ISSO QUE O FABYO COLOCOU... HEHEHE / TROCA ISSO POR ISSO AI EM CIMA;)
$dados["senha"] = $senha;
setcookie("dados", serialize($dados)); 
header("Location: index.php");
} else {
echo "<b>Acesso restrito.</b>";
}
?>

está comentado as linhas, hehehe

Link para o comentário
Compartilhar em outros sites

  • 0

você pode fazer assim

echo "Olá, ".$usuario.". Seja bem-vindo!";

Amon-Rá_Beraldo aqui precisava pegar o cookie com $_COOKIE

desculpe editar aqui , mas achei melhor porque já tinha postado uma resposta grande logo abaixo

[editado por Fabyo]

Fabyo, você poderia me explicar melhor o porquê do uso do serialize()?

Fiz esse teste aqui:

<?php
$dado = "Fandango";
$dado1 = serialize($dado);
echo "$dado <Br> $dado1";
?>

O resultado foi este:

Fandango

s:8:"Fandango";

Qual o motivo de usá-lo? Ele identifica o tipo da variável e só...

Valeu

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Vamos la respendendo a pergunta do OSJunior, já respondo a do Amon-Rá_Beraldo também, então vamos para um exemplo:

criando um cookie:

pagina1.php

<?php
$dados = array();
$dados["nome"]  = "Fabyo";
$dados["senha"] = 123;
$dados["logado"] = true;

setcookie("dados", serialize($dados), time() + 3600);
?>
criei um cookie com tempo de duração de 1 hora 3600 segundos = 1 hora como podem ver usei 3 valores num cookie, nome, senha e logado sem usar serialize isso não seria possivel, dai o usuario não conhecendo esse modo criaria 3 cookie separado. percebam que é bem util e se acostumarem desse modo vao ver que criando varios cookies separados chega ser uma gambiarra, outro dia vi um script de loja virtual onde o usuario criava uns 20 cookies por usuario, agora imagina 50 usuarios online vezes 20 coookies de cada, nossa uma loucura controlar isso tudo. agora vamos resgatar o cookie com os valores que eu guardei pagina2.php
<?php
$dados = isset($_COOKIE["dados"]) ? unserialize((get_magic_quotes_gpc() ? stripslashes($_COOKIE["dados"]) : $_COOKIE["dados"])) : "";

if($dados <> "") {
    $nome   = $dados["nome"];    
    $senha  = $dados["senha"];
    $logado = $dados["logado"];
}
?>

como podem ver já tenho os 3 valores que eu guardei e pronto para usar separado.

agora vou explicar o que eu fiz

usei o isset() para verificar se o cookie existe

se existe verifico se magic_quotes esta ativado no meu php.ini, se tiver ativado o php automaticamente escapa aspas e apostrofos com barra \

se eu der um echo no cookie sem passar o unserialize veja como ele me retorna:

a:3:{s:4:\"nome\";s:5:\"Fabyo\";s:5:\"senha\";i:123;s:6:\"logado\";b:1;}

percebam as barras invertidas isso aconteceu porque meu magic_quotes estava em on por isso quando criei o cookie as aspas foram escapadas automaticamente sem eu precisar usar addslashes()

para quem não sabe addslashes escapa as aspas e apostrofos.

se meu magic_quotes tivesse em off o valor do cookie seria o mesmo mas sem as barras invertidas:

a:3:{s:4:"nome";s:5:"Fabyo";s:5:"senha";i:123;s:6:"logado";b:1;}

dai eu teria que usar uma função para tirar as barras, usando a stripslashes(), ela faz o inverso da addslashes()

por isso que eu testei antes se meu magic_quotes estava em on para não passar a função stripslashes() atoa.

e o serialize transforma qualquer valor em um texto que o php entende, isso mesmo não é mais um array é um texto uma string.

pronto peguei o valor do cookie e separei os valores para usar a qualquer hora respondendo a pergunta do OSJunior basta agora dar um echo $nome para saudar o usuario.

Nota: lembrem de 2 coisas, da para fazer a mesma coisa com session mas as session já passam o serialize e unserialize automaticamente não precisando usar elas

outra coisa quando você cria um cookie para verificar se um usuario está logado basta verificar se o cookie existe, sim isso mesmo essa verificação é super segura, não precisa guardar o nome e senha para verificar toda hora no banco, pois um cookie é salvo no micro do usuario e não existe a possibilidade de um hacker invadir e pegar esse cookie ou invadir o servidor, não tem logica pois se isso acontecer o hacker invadindo um micro já vai direto no banco de dados pra que ele iria querer uma senha para depois logar.

por isso só crie o cookie e teste se ele existe está seguro, agora se quiser guardar outros dados no cookie só para usar depois como o caso de uma saudação salve o nome, se tiver trabalhando com uma loja virtual poderia salvar o id também para fazer pesquisas no banco e resgatar o carrinho do usuario etc...

outra dica podem usar o serialize em conjunto da urlencode e urldecode para guardar ou passar urls de modo seguro

bom falei demais espero ter esclarecido as duvidas, mas se tiverem alguma duvida ainda só postar

t+

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado fabyo.

Foi de muito agrado a sua contribuição. Você poderia colocá-la na seção de Scripts da seção.

Só para terminar o sistema: Como puxo o nome do banco? O acesso puxa o usuario e a senha, mas não o nome.

E como faço para recuperar a senha, caso o usuário esqueça, entende?

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

não entendi como assim o nome do banco?, você quer guardar o nome do banco no mesmo cookie ?

agora sobre recuperar a senha você pode colocar um lembrar senha e o usuario tem que digitar o email que ele cadastrou dai você manda a senha para o email que ele cadastrou com o link criptografado para uma pagina onde ele iria entrar e digitar uma nova senha

continuo avisando que esse login esta sem segurança

vou explicar melhor o que ataque sql injection seu select está assim:

("SELECT * FROM login WHERE usuario = '$usuario' AND senha = '$senha'")

vou substituir os valores das variaveis, veja como o ataque funciona:

$nome = "1' or 1 = '1";

$senha = "1' or 1 = '1";

seu select ficaria:

("SELECT * FROM login WHERE usuario = '1' or 1 = '1' AND senha = '1' or 1 = '1'")

perceba : usuario = '1' or 1 = '1' AND senha = '1' or 1 = '1'

to falando que o usuario é = 1 ou 1 = 1 então sempre o resultado ira ser true por que sempre 1 = 1

dai eu entraria no seu sistema de login muito facil

por isso recomendo você usar uma senha criptografada e passar o select por parametros para matar esses ataques de sql injection

qualquer duvida só postar

Link para o comentário
Compartilhar em outros sites

  • 0

Quanto à segurança, depois eu adapto. Por enquanto estou só fazendo o básico.

Vou explicar o que eu quis dizer.

O cadastro, agora, é composto de: nome, e-mail, nome de usuário e senha.

Para entrar no sistema é necessário apenas o nome de usuário e a senha.

Ao entrar, só consigo pegar informções do nome de usuário e da senha, por causa dos cookies, e portanto, não consigo mostrar o nome da pessoa que está acessando, como por exemplo: Seja bem-vindo João. Não consigo pegar o nome do banco.

Quando você, ou alguém, me responder isso, colocarei aqui outra questão, que é sobre a parte de inclusão de registros. O PHP persiste em não exibir a mensagem de notificação de sucesso do cadastro.

Link para o comentário
Compartilhar em outros sites

  • 0

você viu como que grava um cookie, eu mostrei um exemplo gravando nome, senha e logado só voce auterar e guardar o valor que quiser

ou voce pega o nome do usuario no mesmo select que esta fazendo a verificação ou você pega na outra pagina fazendo um novo select

você sabe fazer um select e pegar os resultados?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...