Autor Tópico: Ajuda com Login em php  (Lida 3452 vezes)

Offline TripleHCP

  • Aprendiz
  • **
  • Mensagens: 82
    • Ver Perfil
Ajuda com Login em php
« em: 26 de Dezembro de 2005, 15:56:45 »
Boas,

então o problema é o seguinte eu estou a tentar fazer um login com alguma segurança, recorrendo á sessão, mas não me estou a entender bem com isto :? O melhor é postar o codico :

Form:
Código: [Seleccione]

<form id="form1" name="form1" method="post" action="actuar.php">
  <table width="200" border="1">
    <tr>
      <td>nickname</td>
      <td><label>
        <input name="nickname" type="text" id="nickname" />
      </label></td>
    </tr>
    <tr>
      <td>password</td>
      <td><label>
      <input name="password" type="password" id="password" />
      </label></td>
    </tr>
  </table>
  <p>
    <label>
    <input type="submit" name="Submit" value="Submit" />
    </label>
  </p>
</form>


actuar.php:
Código: [Seleccione]
<?php
session_start
&#40;&#41;;
if &#40;$_POST['nickname'&#93;=="teste" && $_POST['password'&#93;=="teste"&#41;
&#123; 
session_register&#40;"logado"&#41;;  
echo "<script>window.open&#40;'http&#58;//www.phptriple.orgfree.com/area_espertos.php', '_self'&#41;</script>";
&
#125;else&#123;
echo "ve se deixas de brincar com isto!!";
&
#125;
?>


area_espertos:
Código: [Seleccione]
<?php
session_start
&#40;&#41;;
if&#40;session_is_registered&#40;"logado"&#41;&#41;
&#123;
echo "bem vindo á area restrita...";
&
#125;else&#123;
echo "vai mas e lavar o rabinho com agua das malvas!";
&
#125;
?>


O problema é que eu ponho o nickname e a password certas e aquilo dame sempre "vai mas e lavar o rabinho com agua das malvas!" Porque :?:

Editado por redhotmustang: O código fica mais bonito com o BBCode.

Offline TripleHCP

  • Aprendiz
  • **
  • Mensagens: 82
    • Ver Perfil
Ajuda com Login em php
« Responder #1 em: 26 de Dezembro de 2005, 19:41:03 »
então ninguem sabe o que é que o script tem de mal??? :)

Offline redhotmustang

  • Administrador
  • Emblema de Bronze
  • *****
  • Mensagens: 518
    • Ver Perfil
    • http://www.redcodestudio.com
Ajuda com Login em php
« Responder #2 em: 26 de Dezembro de 2005, 20:50:27 »
Tenho um código diferente que faz o mesmo.
Ou faz correctamente, mas n usa sessões.

Código: [Seleccione]
<?php
//variaveis para ligacao ao MySql Server e BD
$host "localhost";
$user "user";
$password "pass";
$database ="database";

//Ligar e escolher a BD 

//criacao duma variavel connection para envitar estar sempre a escrever mysql_connect
$connection mysql_connect&#40;$host, $user, $password&#41; or die &#40;"n ligou ao servidor"&#41;;
$db mysql_select_db&#40;$database, $connection&#41; or die &#40;"n ligou"&#41;;

//Query oara ver se o usernameexiste na BD
$query1 "SELECT loginName FROM membro WHERE loginName='$username' ";
$resultado1 mysql_query&#40;$query1, $connection&#41; or die &#40;"n conseguiu fazer a query1"&#41;;
$num1 mysql_num_rows&#40;$resultado1&#41;;

//Se encontrar um username

if&#40;$num1 == 1&#41; &#123;

//encriptar a variavel PASS numa string de 40 caracteres Hexadecimal &#40;Não é possível andar para trás&#41;.
$password sha1&#40;$_POST["pass"&#93;&#41;;
//agora temos de mudar a variavel pass que estava na query2 "password=$pass" pela variavel $password
$query2 "SELECT loginName FROM membro WHERE loginName ='$username' AND
password ='password' "
;

//vai contar o num de linhas pq é uma array
$resultado2 mysql_query&#40;$query2,$connection&#41; or die &#40;"N conseguiu fazer a query2"&#41;;
$num2 mysql_num_rows&#40;$resultado2&#41;;

//se encontrar uma password relacionada com o username
if&#40;$num2 >0&#41; &#123;
//redireccionar para dentro do site

header&#40;'Location&#58;site.php'&#41;;

&#125;

//se nao encontrar a password relacionada com o Username
else&#123;
echo"O Username existe, mas a password esta incorrecta<br>
<a href='index.htm'>Voltar ao Login</a>"
;

&#125;

&#125;

//se nao encontrar um username
else&#123;

echo"O username inserido foi mal escrito ou nao existe. <br>
<a href='index.htm'>Voltar ao Login</a>"
;

&
#125;

mysql_close&#40;$connection&#41;;
?>


Não sei se percebi bem o teu código, mas por que é que fazes duas vezes a pergunta se já está logado.

Se para entrar o user e password têm de bater certo, mal entram o código verifica isso de novo pq?

:)
Programação Web e Flash ActionScript

Se quiser agradecer a qualquer membro que o tenha ajudado, fale do Redcodestudio aos seus amigos!

Offline Badboi

  • Novato
  • Mensagens: 5
    • Ver Perfil
Ajuda com Login em php
« Responder #3 em: 19 de Março de 2006, 17:43:29 »
Xii pa... não uses esse codigo para fazeres logins pois têm diversas falhas e mau codigo pelo meio.

- É conveniente fazer algumas verificações antes de fazer query a base de dados.

Código: [Seleccione]
empty($_POST['user'])? $user = null: $user = $_POST['user'];
empty($_POST['pass'])? $post_pass = null: $post_pass = $_POST['user'];

if(!empty($post_pass) and !empty($user)) {

...codigo para a verificação...

}


- Não deves verificar se o user se enganou na password ou não, porque é uma falha de segurança que pode ser violada por "brokeforce". Assim quem tentar forçar o login pode ficar facilmente a saber que aquele dado "nick" se encontra registado e forçar a password. Devem sempre usar a verificação a par e dar login inválido caso não se verifique.

Código: [Seleccione]
$pass = sha1($post_pass);
$query = "SELECT id FROM tabela WHERE name='$name' and pass='$pass'";


- Na minha opinião inves de nick deve-se usar o login por email, pois o email é um dado unico e não se repete. Claro que depende da aplicação que se tiver a desenvolver, mas nicks iguais há muitos e emails iguais não há nenhum.

- Esse teu formulário de login apenas é um redireccionamento. Não é na realidade um sistema de login. Pois quem entrar directamente na página não encontra nenhuma limitação de segurança.

- Senão usares sessões podes ainda usar outros metodos. O primeiro através de um ficheiro txt mas isto não passa da mesma coisa que as sessões, pois as sessões não passam de ficheiros guardados no servidor com os dados que pretendes guardar. O segundo que podes usar é por base de dados, guardar as informações em base de dados. Claro que são ambos muito semelhantes.

- Não precisas de estar sempre a fazer die(), pois se por alguma razão não for possivel fazer aquela acção num dada altura o utilizador recebe uma mensagem muito pouco "user-friendly". Devemos de ter o cuidado de formatar as mensagens que os nossos utilizadores vêm. Claro que uma possivel solução é criares uma função tua para isso tal como:

Código: [Seleccione]
function falha($msg, $fatal = false) {
// Se de extrema gravidade para o funcionamento do sistema
if($fatal == true) {
   die($msg);
} else {
   // Caso muito simples, mas aqui poderás usar muita coisa como classes de erro.
   echo "Ocorreu um erro: $msg";
}

}


Não vou colocar aqui um possivel script de login porque acho que devem tentar desenvolver um vosso e não copiar as coisas! :D

Sem mais,
Badboi.
rocura antes de perguntares!

 




Roleta das Anedotas - Abre noutra janela