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

kwnds

[PHP][Em construção] Script de Login e Registo

12 mensagens neste tópico

Apesar de já ter visto vários scripts de login e registo na net, decidi pegar num muito básico e começar a programa-lo a meu gosto. Como so programo em php há alguns duas ainda está muito básico e provavelmente vulneravel, no entanto vou então deixar aqui o codigo:

config.php

<?
//Conecção com a BD
$bd_ligar = mysql_connect("localhost", $bd_user, $bd_password) or die(mysql_error());
mysql_select_db('kwnds_info', $bd_ligar) or die(mysql_error());


//Configuração da BD
$bd_nome="nome-da-minha-base-de-dados";
$bd_user="nome-do-usuario-da-base-de-dados";
$bd_password="password-da-base-de-dados";
?>

registar.php

<?php
include("config.php");
?>

<html><head><title><Criado de raiz></title></head>
<body>
<center>
<h1> </h1>
<form method="post" action="registando.php">
   Nome: <input name="username" type="text" id="username" maxlength="80">
   <br>
   Password: <input name="password" type="password" id="password" maxlength="80">
   <br>
<br>
   <input type="submit" value="Registo">
</form>
</body></html>

registando.php

<?php
include("config.php");

//recebe os valores submetidos
   $username = $_POST["username"];
   $password = $_POST["password"];
   global $bd_ligar;
   $erro=0;


//Procurar por user na BDBD
   $s=mysql_query("SELECT * FROM info WHERE username='$username'"); //Tabela: info
   $mnr=mysql_num_rows($s);
   if($mnr!=0){ echo '<center>Usename já existe</font>'; $erro++; }


//Procurar números no nome e caracteres especiais no nome
   if( ereg("[0-9()-.,:;*&¬!?|+}{/]", $username) ){
   echo '<center>Nome incorreto</font>';
   $erro++; }
   
      
//Verificar se os campo está vazio
   if(empty($username)){
   echo '<center>Nome em branco</font>';
   $erro++; }
   if(empty($password)){
   echo '<center>Password em branco</font>';
   $erro++; }
   
   
//Caso não hajam erros, vai ser adicionado o email e nome á BD
   if($erro==0)
   { 
   $i=mysql_query("INSERT INTO info (username, password) VALUES ('$username','$password')");
   echo '<center>Registo efectuado<br><br>
   <b>Nome:</b> '.$username.'<br>
   <b>Password:</b> '.$password.'';
   }
?>

Eu ainda preciso de criar sessões e criar as condições do genero "se user logado, entra na pagina, senão faz loggin", mas ainda não comecei a estudar essa materia, algo que amanhã com mais calma irei ver.

Quando tiver o codigo mais actualizado posto. Se alguem tiver ideias agradecia.

Abraços

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lê um pouco sobre SQL injection é bom que aprendas logo do início, para assim criares um bom hábito enquanto fazes os teus scripts.

Há varias maneiras de prevenir lê isto, só para teres a noção do que é.

SQL injection

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estive a ler uns artigos sobre  SQL Injection e nunca imaginei que fosse aplicavel com tanta facilidade, e segundo o que me apercebi, neste codigo é mesmo facil.

Sobre as maneiras como prevenir, reparei que eles dizem para usar-mos addslashes e algoritmos para a passwords, mas não sei o que são.

Alguem me podia dar uma ajuda (se possivel mostrar um exemplo do meu codigo)? Deixo aqui o codigo mais actualizado:

config.php

<?
//Conecção com a BD
//$bd_ligar = mysql_connect("localhost", "$bd_user", "$bd_password") or die(mysql_error());
$bd_ligar = mysql_connect("localhost", $bd_user, $bd_password) or die(mysql_error());
mysql_select_db($bd_nome, $bd_ligar) or die(mysql_error());


//Configuração da BD
$bd_nome="nome-da-bd";
$bd_user="meu-user";
$bd_password="password";
?>

registando.php

<?php
include("config.php");

//recebe os valores submetidos
   $username = $_POST["username"];
   $password = $_POST["password"];
   global $bd_ligar;
   $erro=0;


//Procurar por user na BDBD
   $s=mysql_query("SELECT * FROM info WHERE username='$username'"); //Tabela: info
   $mnr=mysql_num_rows($s);
   if($mnr!=0){ echo '<center><font color="#FF0000">Usename já existe</font>'; $erro++; }


//Procurar números no nome e caracteres especiais no nome
   if( ereg("[0-9()-.,:;*&¬!?|+}{/]", $username) ){
   echo '<center><font color="#FF0000">Nome incorreto</font>';
   $erro++; }
   
      
//Verificar se os campo está vazio
   if(empty($username)){
   echo '<center><font color="#FF0000">Nome em branco</font>';
   $erro++; }
   if(empty($password)){
   echo '<center><font color="#FF0000">Password em branco</font>';
   $erro++; }
   
   
//Caso não hajam erros, vai ser adicionado o email e nome á BD
   if($erro==0)
   { 
   $i=mysql_query("INSERT INTO info (username, password) VALUES ('$username','$password')");
   echo '<center>Registo efectuado<br><br>
   <b>Nome:</b> '.$username.'<br>
   <b>Password:</b> '.$password.'';
   }
?>

registar.php
<?php
include("config.php");
?>

<html><head><title><Criado de raiz></title></head>
<body>
<center>
<h1> </h1>
<form method="post" action="registando.php">
   Nome: <input name="username" type="text" id="username" maxlength="80">
   <br>
   Password: <input name="password" type="password" id="password" maxlength="80">
   <br>
<br>
   <input type="submit" value="Registo">
</form>
</body></html>

entrando.php
<?
//Esta codigo serve para verificar se o user já fez o login
include("config.php");
session_name("MeuLogin");
session_start();

if($_GET['accao'] == "entrar") {
    global $bd_ligar;
    $banco = mysql_select_db('$bd_nome'); 
   
    $username= $_POST['username'];
    $q_user = mysql_query("SELECT * FROM info WHERE username='$username'");

    if(mysql_num_rows($q_user) == 1) {
   
        $query = mysql_query("SELECT * FROM info WHERE username='$username'");
        $dados = mysql_fetch_array($query);
        if($_POST['password'] == $dados['password']) {
            session_register("username");
            header("Location: page.php");
            exit;
        } else {
            header("Location: entrar.php?login=falhou&causa=".urlencode('Senha Errada'));
            exit;
        }
    } else {
        header("Location: entrar.php?login=falhou&causa=".urlencode('User Inválido'));
        exit;
    }
}

//Verifica se o login já foi efectuado e com sucesso
if(session_is_registered("username") == false) {
    header("Location: entrar.php");
}
?>

entrar.php

<?
include("config.php");
session_name("MeuLogin");
session_start();
session_destroy();

if($_GET['login'] == "falhou") {
    print $_GET['causa'];
}
?>
<form name="form1" method="post" action="entrando.php?accao=entrar">
Login: <input name="username" type="text" id="username">
<BR>
Senha: <input name="password" type="password" id="password">
<BR>
<input type="submit" value="Entrar">
</form>
<p><a href="registar.php">Registar</a></p>

sair.php

<?
//inicia a sessão
session_start();

//check to make sure the session variable is registered
if(session_is_registered('username')){

//session variable is registered, the user is ready to logout
session_unset();
session_destroy();
}
else{

//the session variable isn't registered, the user shouldn't even be on this page
header("Location: entrar.php");
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda tens aí umas falhazitas, nomeadamente:

    $username= $_POST['username'];
// deverias usar:
$username = mysql_real_escape_string($_POST['username']);

EDIT: Adicionei o ) que faltava ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu mudei isso do username mas apareceu-me isto:

Parse error: syntax error, unexpected ';' in /home/kwnds/public_html/-mome-do-meu-site/registando.php on line 5

E a linha 5 é a linha que eu alterei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegui encontrar o erro, estava na falta de um ), ficou assim:

$username = mysql_real_escape_string($_POST['username']);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegui encontrar o erro, estava na falta de um ), ficou assim:

$username = mysql_real_escape_string($_POST['username']);

Tens razão, já alterei ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

so uma pergunta... uma variavel k passe pelo URL, por exemplo de pesquisa de kker coisa, nos podemos por na variavel por exemplo: passaro; drop table animais; e ele faz ? xD isto é 1 pouco mt estupido xD (a minha teoria)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

so uma pergunta... uma variavel que passe pelo URL, por exemplo de pesquisa de kker coisa, nos podemos por na variavel por exemplo: passaro; drop table animais; e ele faz ? xD isto é 1 pouco mt estupido xD (a minha teoria)

Se tiveres este código:

$user=$_POST['user'];

mysql_query("SELECT * FROM users WHERE user = '$user'");

se eu no form puser: ' OR 1 = 1#,  a query que é mandada para o MySQL server era:

SELECT * FROM users WHERE user = '' OR 1 = 1#'

E ia ter a tabela inteira ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só agora reparei neste tópico, djthyrax não tens aí uma cena mal?

Tipo não é OR em vez de AND que querias dizer? Porque assim só te vai dar os registos que tenham como nome vazio. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só agora reparei neste tópico, djthyrax não tens aí uma cena mal?

Tipo não é OR em vez de AND que querias dizer? Porque assim só te vai dar os registos que tenham como nome vazio. :P

Tens razão, é OR. Já alterei.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Leiam um pouco sobre hijaking http://en.wikipedia.org/wiki/Hijacking

ou então youtube.com e aprendam a entrar no hotmail fácil fácil

Convém criar um fingerprint e verificar sempre em todas as páginas se é válido. Quanto melhor um fingerprint, maior será a segurança.

Fica um exemplo de fingerprint

<?php

$fingerprint = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].session_id());

?>

Assim, para entrarem com a vossa sessão será muito difícil pois o ip altera e mais umas quantas coisas.

Cumprimentos

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