Jump to content

Fazer um login


Llaverola

Recommended Posts

Vais usar PHP?

Tens exemplos aqui:

http://www.revistaphp.com.br/artigo.php?id=67

http://www.portugal-a-programar.pt/index.php?showtopic=1446

Tem em cuidado que esses artigos não tomam em atenção como prevenir o SQL Injection. 😛

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other sites

ESTE É O MEU FICHEIRO login.php

<html>
<head>
</head>
<body>
<?


// as seguintes variaveis vao receber os valores, respectivos,  que foram escritos no from  da seguinte forma
$nome=$_POST["$ricardo"];
$password=$_POST["$coelhor"];


// vamos connectar ao servidor:  localhost ( pode ter outro endereço ) , utilizador :  nome_do_utlizador , e password :"pass "
$conectar=mysql_connect("localhost", "13137","jokjHp" ) or die ("Falhou ligar a base de dados...");


// vamos seleccionar a base de dados que queremos, neste caso "tofas"
$bdd=mysql_select_db("projecto", $conectar) or die ("Falhou..base de dados desconhecida....");

// a pesquiza pretendida 
$pesquisa="select user_password from tbl_auth_user where user_id='$ricardo';";

//efectuar a pesquisa na base de dados : projecto
$resultado=mysql_query($pesquisa);

// aqui vamos obter o numero de resutados obtidos (   linhas ... )
$num=mysql_num_rows($resultado);


// se tivermos obtido resultados vamos fazer a verificao da pass, e efectuar as operacoes que pretendemos

if( $num!=0 )
{   // enquanto exiterem linhas ( nao esta mto correcto mas espero que tenham percebido a intencao) 
while( list($password)= @ mysql_fetch_row($resultado) )
{  
   // a variavel query vai tomar o valor da pass que foi resultado da pesquisa
   $query=$password;
}

    // vamos verificar se as pass's sao iguais para poder continuar 
if( $query==$password)
{ // aqui as pass's sao iguais 

     echo "<br>consegui efectuar o login..." ;

}
else // aqui as pass's sao  diferentes
{
    echo "<br> password errada ou entao o numero de utilizador";

}

}
else  // aqui temos que $num=0
{
  echo "<br> houve um erro, nao foi possivel efectuar o login, numero de utilizador invalido...";

}

// desligar a ligacao a base de dados... 
mysql_close($conectar);


?>

</body>
</html>


e este é o meu ficheiro enviar.html que contém tb codigo .php

<html>
<head>
<title> Login </title>
</head>

<body>

<p><b> Login </b></p>

<form action="login.php" method="POST">

<!--      texto referente ao titulo  da caixinha e  respetiva caixinha para o utilizador escrever o nome ou pode ser o numero de utilizador, é so alterar ....   
o valor que vai ser escrito vai ser o valor da "variavel nome" (  pode mudar a palavra nome para outro nome...  ) 
o valor de size pode tambem ser alterado....( que deve corresponder ao tamanho que é definido na base de dados ) 
-->

<b>Numero do utilizador</b> 
<p><input type="text" value="" name="nome"size="10" ></p>

<!--      texto referente ao titulo da caixinha  e respetiva caixinha para o utilizador escrever a password ....        
o valor que vai ser escrito vai ser o valor da "variavel pass" (  pode mudar a palavra pass para outro nome...  ) 
o valor de size pode tambem ser alterado....( que deve corresponder ao tamanho que é definido na base de dados ) 

-->
<b><br>Password</b>
<p><input type="password" value="" name="pass" size="20" ></p>

<p> <!--  botoes         submit ->  Login  ( pode mudar este nome)  e   reset-> Reset  ( pode mudar este nome)       -->
   <input type="submit" value="Login" name="validar" >
     
   <input type="reset" value="Reset" name="limpar" >
</p> 

</form


</body>
</html>

VERIFICAM ALGUM ERRO????

é q n tou a conseguir fazer o login. esses ficheiros estao na pasta do xampp/htdocs...

Link to comment
Share on other sites

Experimenta abrir o php com <?php e fechar com ?> em vez de <? e ?>.

$nome=$_POST["$ricardo"];
$password=$_POST["$coelhor"];

Isto está incorrecto. Tens de por o nome dos campos do HTML, ou seja nome e pass, ficará

$nome=$_POST["nome"];
$password=$_POST["pass"];


$pesquisa="select user_password from tbl_auth_user where user_id='$ricardo';";

Mais uma vez está incorrecto, deverás usar a variável óbvia neste caso, a variável username


De resto parece estar tudo certo... mas para correres isto, não é pores as passwords no ficheiro php, mas sim no formulário em html, quando o corres no Firefox/IE. Experimenta agora correr os ficheiro html (dentro do xammp claro).

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.

Link to comment
Share on other sites

é assim, eu tenho uma tabela na minha base de dados chamada tbl_auth_user com dois campos. o 1º o user_id = ricardo, e o user_password= coelhor. daí eu usar esta linha de codigo:

"select user_password from tbl_auth_user where user_id='$ricardo';";

entendes softclean?

ja pus td dentro da pasta xampp, e na pasta htdocs, corri o html, pus o nome ricardo e a pass coelhor e n deu :S aparece sempre a mm mensagem.

"consegui efectuar o login..." ; } else // aqui as pass's sao diferentes { echo "

password errada ou entao o numero de utilizador"; } } else // aqui temos que $num=0 { echo "

houve um erro, nao foi possivel efectuar o login, numero de utilizador invalido..."; } // desligar a ligacao a base de dados... mysql_close($conectar); ?>"

se reparares são as ultimas linhas de codigo 😛

Link to comment
Share on other sites

Sim, eu entendi, mas se quiseres ter mais de um user, tens de perguntar qual quer aceder, e por isso é que está o html, para perguntar ao user o que ele quer.

Depois, o outor problema, eu nnão sei se estará correcto, mas experimenta trocar

echo "<br>consegui efectuar o login..." ;

para

echo "<br>consegui efectuar o login...";

O ponto e virgula no fim sem espaço a separar...

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.

Link to comment
Share on other sites

Eu adicionei. Mas olha, não sei se estás interessado, mas tenho aqui outro "produto" para te "vender"  😉

Este é o script que costumo usar para iniciar sessões. Pode ser que seja útil, mas de forma mais simples, eu comentei as linhas, de forma a que percebas o que se passa a cada instante.

<?php
//Script para fazer login

//criar uma ligação com a base de dados
$conectar=mysql_connect("localhost", "13137","jokjHp" ) or die ("Falhou ligar a base de dados...");

//seleccionar a base de dados pretendida
//notar que não é preciso ocupar uma variavel para ver se foi seleccionada, pois o die tratará do erro, caso exista
mysql_select_db("projecto", $conectar) or die ("Falhou..base de dados desconhecida....");

//Agora vamos tratar de limpar as variáveis para que não ocorra a situação de SQL Injection, que te foi referida anteriomente
//o que este código faz é substituir caracteres especiais que te poderiam mudar a query
//ver mais em http://php.net/mysql_real_escape_string e ainda em http://en.wikipedia.org/wiki/SQL_injection
mysql_real_escape_string($_POST[]);

//e agora vamos coloca-las em variáveis
$utilizador = $_POST['nome'];
$chave = $_POST['pass']

//agora vamos fazer a query
// a pesquisa pretendida 
$pesquisa="select user_id from tbl_auth_user where user_id='$utilizador' and user_password='$chave'";

//efectuar a pesquisa na base de dados : projecto
//com um die, para verificar se há algum erro na pesquisa. Podes ver o que faz a função mysql_error() em http://php.net/mysql_error
$resultado=mysql_query($pesquisa) or die(mysql_error());

// aqui vamos obter o numero de resutados obtidos (   linhas ... )
$num=mysql_num_rows($resultado);

//Logica: Se há um utilizador a fazer login, entao temos 1 linha na query, se estiver tudo certo, temos entao
//se num_linhas == 1 entao
//	passou, login com sucesso
//senao
//	falhou, porque os dados estão incorrectos
if($num!=1){
	echo "Login com sucesso!";
}else{
	echo "Falhou no login, tente novamente!";
}

// desligar a ligacao a base de dados... 
//nao é obrigatório, uma vez que por default, a ligação é fechada automaticamente
mysql_close($conectar);
?>

Não necessitas de mudar o teu codigo HTML.

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.

Link to comment
Share on other sites

Entao vamos definir uma coisa:

- A password do sql (onde tens a instrução mysql_connect) fica so para esse efeito, ela fica lá, pronto.

- Em vez de correres o script php, primeiro vais ao html, e poes la os dados de login., depois o resto do processo é automatico, nao precisas de por as tuas passes da tabela users no script (apenas precisa de estar la a pass de sql, que ja está em cima).

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.

Link to comment
Share on other sites

Ois

Tenho aqui um feito por mim, podes tirar ideias daqui.

Atençao k isto foi so para + ou - perceber como isto se faz, os pros k depois digam os erros e as alteraçoes a fazer.

Ficheiro Functions.php

<?php
function Tentar_Login($FNome, $FPass)
{
include "DB_Configs.php"; // Aqui eh onde tao estas variaveis DB_Host, DB_User, DB_Pass.
$Conectar=mysql_connect(DB_Host, DB_User, DB_Pass) Or Die("Falhou conectar á base de dados");
mysql_select_db(DB_Name, $Conectar) Or Die("Base de dados desconhecida");
$Query="SELECT Nome, Pass FROM Utilizador WHERE Nome='$FNome'";
$Resultado=mysql_query($Query);
$Num=mysql_num_rows($Resultado);
if ($Num != 0)
{
	list($Nome, $Pass) = @ mysql_fetch_row($Resultado);
	$FPass=md5($FPass);
	If ($FPass == $Pass)
		return true;
	else
		return"Password incorrecta.";
}
else
	return "Nome não existe.";
}

function Confirmar_Login()
{
//	session_start();
if (isset($_SESSION["F_Nome"]))
	return True;
else
	return False;
}
?>

Ficheiro Index.php

<?php
include "Functions.php";
$ErroLogin=False;
$StrErroLogin=" ";
if (isset($_POST["SubmitInput"]))
{
if (isset($_POST["Nome"]))
	$F_Nome=$_POST["Nome"];
if (isset($_POST["Pass"]))
	$F_Pass=$_POST["Pass"];
if (empty($F_Nome) || empty($F_Pass))
{
	$ErroLogin=True;
	$StrErroLogin="Dados Incompletos";
}
Else
{
	$Func_Return=Tentar_Login($F_Nome, $F_Pass);
	if ($Func_Return=="True")
	{
		session_start();
		$_SESSION['F_Nome']=$F_Nome;
	}
	else
	{
		$ErroLogin=True;
		$StrErroLogin=$Func_Return;
	}
}
}
?>

<?php
if (Confirmar_Login())
{
?>
<html>
<head>
<title>Index</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script language="JavaScript">
</script>
</head>
<body>
<span>Pagina principal.<?php echo $_SESSION["F_Nome"] ?></span><a href="Principal.php">eee</a>
<?php
}
else
{
?>
<html>
<head>
<title>Index</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<STYLE TYPE="text/css">
#TableLogin {
background-color:#CCCCC0;
border:1 solid #000000;
}
</STYLE>
<script language="JavaScript">
</script>
</head>
<body>
<table width="100%" heigth="100%" cellspacing="0" cellpadding="0">
<tr>
	<td align="center" valign="bottom">
		<table width="1" id="TableLogin" cellspacing="0" cellpadding="0">
			<?php if ($ErroLogin==True) {
			?>
			<tr>
				<td align="center" valign="top" height="30" colspan="2"><span><b>Erro no login.</b></span></td>
			</tr>
			<tr>
				<td align="center" valign="top" height="30" colspan="2"><span><b><?=$StrErroLogin ?></b></span></td>
			</tr>
			<?php } ?>
			<tr>
				<td align="center" valign="top" height="30" colspan="2"><span>Por favor faça o login.</span></td>
			</tr>
			<tr>
				<form method="post" action="<? echo $_SERVER['PHP_SELF']; ?>">
				<td align="right"><span>Nome : </span></td>
				<td> <input type="text" name="Nome" value="" size="20" maxlength="50" /></td>
			</tr>
			<tr>
				<td><span>Password : </span></td>
				<td> <input type="password" name="Pass" value="" size="20" maxlength="32" /></td>
			</tr>
			<tr>
				<td align="center" colspan="2"><input type="submit" name="SubmitInput" value="Login" /></td>
				</form>
			</tr>
		</table>
	</td>
</tr>
</table>
<?php
}
?>
</body>
</html>
<?php
?>

Ficheiro Principal.php

<?php
include "Functions.php";
session_start();
if (!Confirmar_Login())
Header("Location: Index.php");
?>
<html>
<head>
<title>Principal</title>
<script language="JavaScript">
</script>
</head>
<body>
<span>Pagina principal 2.<?php echo $_SESSION["F_Nome"] ?></span>
</body>
</html>

Repara k nao previne o SQL Injection e a maneira k eu uso para ver se a sessao esta aberta tb nao presta.

Ah pouco tempo li estes 2 posts :

http://www.portugal-a-programar.pt/index.php?showtopic=3797

http://forums.ptsec.net/linguagens_web/artigo_vulnerabilidades_em_aplicacoes_web-t1117.0.html

e falei com o djthyrax e ele disse me k a melhor maneira de verificar a sessao eh esta:

Crias uma HASH dos headers do cliente quando ele faz o login e a cada pedido do cliente voltas a fazer uma nova HASH dos headers e comparas com a k ja tinhas.

//Para gerar o hash de verificação
foreach($_SERVER as $k => $v) if(!strstr($k, "REFERER") && substr($k, 0, 5) == "HTTP_") $dadosDeVerificacao[$k] = $v;
$hash = md5(serialize($dadosDeVerificacao));

//Verificacao
if($hashNoServer != $hashGeradoNoMomento){
    $_SESSION = array();
    session_destroy();
    header("Location: login.php");
}

Espero nao estar a dizer nada de errado, os pros k confirmem.

Se a vida te voltar as costas aproveita e apalpa-lhe o cu.

Link to comment
Share on other sites

Outra coisa eu quando vou ver se os dados sao correctos na funçao Tentar_Login se o nome nao existir digo k o nome nao existe e

se a password for incorrecta tb o digo e isto nao se deve fazer, deve se dizer k os dados estao incorrectos pq se um hacker souber

k o nome esta correcto pode tentar usar ataques de dicionario ou brute force.

Se a vida te voltar as costas aproveita e apalpa-lhe o cu.

Link to comment
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
×
×
  • Create New...

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.