Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    I miei primi due script in PHP

    E' da circa una settimana che ho iniziato ad interessarmi al PHP, lo trovo un linguaggio molto potente e non difficilissimo da imparare..
    Ho creato uno script che permetta ad un utente di loggarsi all'interno di un sito, andando a prelevare username e password da un database e confrontandoli con quelli immessi dall'utente.
    Vi posto il codice, vorrei sapere ke ne pensate, quali cose potrei migliorare e come, sicuramente avrò fatto tanti errori(lo script sia chiaro funzionaXD)da principiante..
    <?php
    //codice html
    $html = '
    <html>
    <head>
    </head>
    <body>
    <form id="form1" name="form1" method="post" action="login.php">
    <input type="text" name="user" />
    <input type="password" name="pwd" />
    <input type="submit" name="submit" value="Invia" />
    </form>
    </body>
    </html>
    ';



    //lo script preleva da una database username e password e li confronta con quelli immessi dall'utente

    //impostazioni per la connessione al db
    $db_host = "localhost";
    $db_user = "root";
    $db_password = "";
    $db_name = "prova";
    $db = mysql_connect($db_host, $db_user, $db_password);
    //errore in caso non si riesca a collegare al db
    if ($db == FALSE)
    die ('<font color ="red">[b]Errore nella connessione al database[b]</font>'.mysql_error());
    //selezione del db
    mysql_select_db($db_name, $db)
    or die ('<font color ="red">[b]Errore nella selezione del database[b]</font>'. mysql_error());
    $i= 0; //è il flag di errore
    $user =addslashes($_POST['user']);
    $pwd =addslashes($_POST['pwd']);
    if(!empty($user) && !empty($pwd)) { //se le variabili non sono vuote
    if ((strlen($user)<=15 && strlen($user)>=3) && (strlen($pwd)<=15 && strlen($pwd)>=3)) {
    $query = "SELECT user FROM users WHERE user = '$user'";
    $result = mysql_query($query,$db);
    $query2 = "SELECT pass FROM users WHERE pass = '$pwd'";
    $result2 = mysql_query($query2,$db);
    if((mysql_num_rows($result) == 1) && (mysql_num_rows($result2)) == 1)
    echo '[b]autenticato con successo![b]';
    else {
    echo $html;
    echo '[b]Dati di login errati[b]';
    }
    }
    else
    $i=1;
    }
    else
    echo $html; //visualizza il codice html all'apertura della pagina}
    if($i==1) {
    echo $html;
    echo '[b]Errore:Username e Password devono essere compresi tra 3 e 15';
    }
    mysql_close($db);
    ?>
    questo invece è quello per far registrare gli utenti:
    <?PHP

    $db_host = "localhost";
    $db_user = "root";
    $db_password = "";
    $db_name = "prova";
    $db = mysql_connect($db_host, $db_user, $db_password);

    //variabili per la connessione al db

    if ($db == FALSE)
    die ('<font color ="red">[b]Errore nella connessione al database[b]</font>'.mysql_error());

    //msg di errore nel caso nn riesca a collegarsi al db

    mysql_select_db($db_name, $db)
    or die ('<font color ="red">[b]Errore nella selezione del database[b]</font>'. mysql_error());

    //parametri passati con metodo post dalla pagina precedente

    $user = addslashes($_POST['user']);
    $pwd = addslashes($_POST['pwd']);
    $email = addslashes($_POST['email']);
    $i=0;
    //controlli sui dati immessi
    if(strlen($user) >15 || strlen($user) < 3) {
    echo'
    [b]Hai inserito un username non valido, devi inserire un username con caratteri compresi tra 3 e 15[b]';
    $i++; }
    elseif(strlen($pwd) >15 || strlen($pwd) < 3) {
    echo'
    [b]Hai inserito una password non valida, devi inserire una pwd con caratteri compresi tra 3 e 15[b]';
    $i++; }
    elseif(strlen($email) >20) {
    echo'
    [b]Hai inserito una mail non valida, il massimo numero di caratteri consentiti è 20[b]';
    $i++; }
    //controllo per vedere se l'username inserito esiste già nel db
    $query_user = "SELECT user FROM users WHERE user = '$user'";
    $result = mysql_query($query_user,$db);
    $num_righe = mysql_num_rows($result);
    if($num_righe == 0 && $i == 0) {
    $query = "INSERT INTO users (user, pass, mail)
    VALUES ('$user', '$pwd', '$email') ";
    if (mysql_query($query, $db)) {
    echo 'Registrazione effettuata con successo

    Ti ricordo i dati che hai immesso:

    Username:'.$user.'

    Password:'.$pwd.'

    Indirizzo e-mail: '.$email.'
    ';
    }
    else echo '<font color ="red">[b]Errore nella connessione al db[b]</font>'.mysql_error();


    }

    else
    echo $user.' il nome utente immesso è già in uso, scegline un altro';




    mysql_close($db);
    ?>

  2. #2
    qlc mi aiuta?

  3. #3
    La prima cosa che mi viene in mente è riguardo alla procedura di login.
    Ho notato che effetti 2 query per vedere la corrispondenza dell'utente nel database:

    $query = "SELECT user FROM users WHERE user = '$user'";
    $result = mysql_query($query,$db);
    $query2 = "SELECT pass FROM users WHERE pass = '$pwd'";
    $result2 = mysql_query($query2,$db);

    E' scorretto perchè un utente potrebbe inserire il proprio userid e la password di un altro e il sitema lo farebbe entrare. Per evitare questo usa semplicemente

    $query = "SELECT user,pass FROM users WHERE user = '$user' AND pass = '$pwd'";
    Michele Castellucci
    Sviluppatore Web del Consorzio CottonBit
    Consorzio Cottonbit
    Risorse per la programmazione
    Dire Fare Programmare!

  4. #4
    Ho letto velocemente la pagina di autenticazione e ti dico un paio di mie opinioni in prospettiva di ottimizzazione(non è detto che siano corrette e non è detto che siano le uniche, anzi sicuramente c'è molto altro da dire):

    1)quello che ha detto ghiaccio non dovrebbe essere verò poichè user a te è il nome utente e non l'userid

    2)il fatto che utente e password devono essere comprese tra 3e 15 è un controllo che va fatto in fase di registrazione, non ad ogni login
    3)le 2 query
    $query = "SELECT user FROM users WHERE user = '$user'";
    $result = mysql_query($query,$db);
    $query2 = "SELECT pass FROM users WHERE pass = '$pwd'";

    fai prima a farne solo 1 select from users where user = .... and pass = ....


    4)creando la variabile $html in quel modo tu in OGNI caso stai andando ad assegnare il valore a quella variabile, ma se i dati di login sono errati quella variabile non sarà mai mostrata..
    facevi prima a fare semplicemente echo 'form'

    5)io non inserisco mai i dati di login al database all'interno di una pagina, creo sempre un file di configurazione e poi lo includo

    Mi è balzata all'occhio 1 cosa della pagina di registrazione ma nn ho letto il resto:
    1)c'è una xss, quando mostri i dati utente fai htmlentities($user)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.