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

    Codice sbagliato nel login

    ciao ragazzi...
    cosa c'è di sbagliato in qusto codice?
    PEchè vi spiego... mi crea le sessioni... anche se metto una user e una pass inventate.. perchè? non dovrebbe....

    codice:
    //INIZIO CONTROLLI LOGIN
    session_start ();
    include "../dati.php" ; 
    mysql_select_db($db_name, $db);
    if ( $_GET[action]=="login")
    {
    $sql_controllo="SELECT password,id FROM iscritti WHERE username = '$_POST[username]' ";
    $result_controllo = mysql_query($sql_controllo); 
    $controllo = mysql_fetch_array($result_controllo);
    
    if ( $controllo[password] == "$_POST[password]" ) { 
    $_SESSION[loggato]="si";
    $_SESSION[username]="$_POST[username]";
    $_SESSION[id_user]="$controllo[id]";
    setcookie ("username", "$_POST[username]",time()+31536000,"/") ; 
    setcookie ("password", "$_POST[password]",time()+31536000,"/") ; 
    } 
    }
    elseif ( $_GET[action]=="logout")
    {
    $_SESSION[loggato]="no";
    session_destroy(); 
    setcookie ("username", "", time() - 31536000,"/"); 
    setcookie ("password", "", time() - 31536000,"/"); 
    }
    
    
    if ( $_SESSION[loggato]=="si"  ) { $login="ok"; }
    
    elseif ( isset($_COOKIE[username]) AND isset ($_COOKIE[password]) ) 
    {
    $sql_controllo="SELECT password,id FROM iscritti WHERE username = '$_COOKIE[username]' ";
    $result_controllo = mysql_query($sql_controllo); 
    $controllo = mysql_fetch_array($result_controllo);
    
    if ( $controllo[password] == "$_COOKIE[password]" ) { 
    $_SESSION[loggato]="si";
    $_SESSION[username]="$_COOKIE[username]";
    $_SESSION[id_user]="$controllo[id]";
    $login="ok";
    } 
    else 
    { 
    $login="no";
    }
    }
    
    else { $login="no"; }
    
    if ( $login=="ok" )  { $sql_user="SELECT * FROM iscritti WHERE id = '$_SESSION[id_user]' ";
    $result_user = mysql_query($sql_user); 
    $users = mysql_fetch_array($result_user); }
    //FINE CONTROLLI LOGIN
    IN REALTA' SONO REGISTRATO DAL 2001 PERO' MI HANNO BANNATO PER AVER SCRITTO DUE MESSAGGI NELLA SEZIONE ERRATA...CHE RICONOSCENZA!!!

  2. #2
    Ho trovato qualche errore.. e ho cercato di sistemarlo meglio che potevo..

    vedi te se ti piace..
    piccoli consigli quando fate queste cose..
    non richiamare mai una chiave dentro un'array senza apici..
    sbagliato: $_POST[chiave]
    giusto: $_POST['chiave']
    non sai mai cosa ti va a prendere

    fai sempre un trim sulle $_GET e le $_POST che butti dirette nelle query..
    non si sa mai..

    se c'è qualche problema fa sapere

    Codice PHP:
    <?php
    // comodità mia
    function CheckUser($username$password) {
        
    $sql_controllo="SELECT username, password,id FROM iscritti WHERE username = '$username' AND password = '$password'";
        
    $result_controllo mysql_query($sql_controllo); 
        if ((
    $controllo mysql_fetch_array($result_controllo)) != false) {
            
    // Sempre negli array in generale.. metti i nomi delle chiavi fra apici
            
    $_SESSION['loggato']="si";
            
    $_SESSION['username']= $controllo['username'];
            
    $_SESSION['id_user']= $controllo['id'];
            
    setcookie ("username"$controllo['username'],time()+31536000,"/") ;
            
    setcookie ("password"$controllo['password'],time()+31536000,"/") ;
        }
    }

    //INIZIO CONTROLLI LOGIN
    session_start ();
    include 
    "../dati.php" 
    mysql_select_db($db_name$db);
    // Login
    if ($_GET[action]=="login") {
        
    // occhio alle variabili.. non tutte le puoi inserire dentro una stringa
        // anche un'altra cosa, fagli sempre almeno un trim su tutte le variabili
        // che ti passano e che vai a mettere nelle query (giusto per evitare i furboni)
        
    CheckUser(trim($_POST['username']), trim($_POST['password']));
    } elseif ( 
    $_GET['action']=="logout") {
        
    // $_SESSION['loggato']="no"; // questo è inutile visto che dopo disturggi la sessione
        
    $_SESSION = array(); // giusto per evitare cose strane
        
    session_destroy();
        
    session_unset();
        
    setcookie ("username"""time() - 31536000,"/"); 
        
    setcookie ("password"""time() - 31536000,"/"); 
    } elseif ((
    $_COOKIE['username']) AND ($_COOKIE['password'])) {
        
    CheckUser(trim($_COOKIE['username']), trim($_COOKIE['password']));
    }

    if ( 
    $_SESSION['loggato']=="si") {
        
    $login="ok";
    } else { 
        
    $login="no";
    }

    // questa non l'ho capita.. a cosa serve??? dal momento che è loggato sei sicuro che è a posto
    // forse lo utilizzi per il debug
    if ( $login=="ok" )  { $sql_user="SELECT * FROM iscritti WHERE id = '" .$_SESSION['id_user'] ."' ";
    $result_user mysql_query($sql_user); 
    $users mysql_fetch_array($result_user); }
    //FINE CONTROLLI LOGIN

    ?>

  3. #3
    // questa non l'ho capita.. a cosa serve??? dal momento che è loggato sei sicuro che è a posto
    // forse lo utilizzi per il debug
    if ( $login=="ok" ) { $sql_user="SELECT * FROM iscritti WHERE id = '" .$_SESSION['id_user'] ."' ";
    $result_user = mysql_query($sql_user);
    $users = mysql_fetch_array($result_user); }
    //FINE CONTROLLI LOGIN

    Questo mi serve...perchè poi mostro all'utente se ha dei nuovi messaggi ecc..

    Cmq..grazie del codice...alcune cose le implemento nel mio script!

    Ma una domanda.,.
    perchè non va bene if ( $controllo[password] == "$_POST[password]" )
    ma usi if (($controllo = mysql_fetch_array($result_controllo)) != false)???

    Anche io usavo questo metodo..ma me lo hanno sconsgliato per la storia delle sql injection..
    IN REALTA' SONO REGISTRATO DAL 2001 PERO' MI HANNO BANNATO PER AVER SCRITTO DUE MESSAGGI NELLA SEZIONE ERRATA...CHE RICONOSCENZA!!!

  4. #4
    la password crittala sempre
    tipo $_POST['password']
    $pass = md5($_POST['password'];

    if ( $controllo[password] == "$_POST[password]" )
    questo che hai scritto te non va bene per due motivi.. il primo che le chiavi che richiami con le [] devono essere sempre tra apici.. in modo da non fargli casini

    l'sql injection lo fai tramite un form
    però se tu fai in modo che i dati che ricevi tramite il form e che vanno a operare sul database non li metti nudi e crudi.. tipo anche trim o ancora meglio un'addslashes già dovresti evitare gli errori più banali.. (in ogni caso se sul server hai magic_quotes = on non dovresti avere questo problema)

    seconda cosa.. perchè fargli fare un controllo al php quando il database è molto più veloce e performante

  5. #5
    ciao rqagazzi
    Ho trovato un problema:

    in questo punto:
    elseif ( $_GET[action]=="logout")
    {
    $_SESSION[loggato]="no";
    session_destroy();
    setcookie ("username", "", time() - 31536000,"/");
    setcookie ("password", "", time() - 31536000,"/");
    }


    I cookie a questo punto sono ancora presenti.
    Infatti se metto: echo $_COOKIE[username] per esempio, me lo da ancora valido, anche se io l'ho eliminato,
    Si elimina solo all0' aggiornamento della pagina...perchè?
    IN REALTA' SONO REGISTRATO DAL 2001 PERO' MI HANNO BANNATO PER AVER SCRITTO DUE MESSAGGI NELLA SEZIONE ERRATA...CHE RICONOSCENZA!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.