+ Rispondi alla Discussione
Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 15 di 19

Primi esperimenti per login utenti

Ultimo Messaggio di Thedarkita il:
  1. #1
    User
    Data Registrazione
    Jan 2008
    Messaggi
    178

    Primi esperimenti per login utenti

    Ciao a tutti conosco da un po' di tempo il php e adesso sto cercando di applicarlo a mysql per una gestione dei login e registrazioni. Ho iniziato a fare qualche prova per il login, premetto che non sono andato a guardarmi come si fa o a copiare cose già fatte, quindi potrei aver fatto una cosa di bassissimo livello. Però per incominciare ho voluto provare a ragionarci su un po' per capire meglio, poi se esistono degli algoritmi migliori li vado a guardare. Per adesso non ho ancora considerato la sicurezza. vi posto il codice delle pagine che ho fatto di prova:


    Pagina di login:

    Codice:
    <html>
    <body>
    <form method="post" action="accesso.php">
      <label>Utente:
      <input name="utente" type="text" id="utente" maxlength="20" />
      </label>
      <p>Password:<label>
        <input name="pass" type="password" id="pass" maxlength="20" />
        </label>
      </p>
      <p>
        <label>
        <input type="submit" name="Submit" value="Invia" />
        </label>
      </p>
    </form>
    </body>
    </html>
    Pagina di accesso:

    Codice:
    <?php
    $utente=$_POST['utente'];
    $pass=$_POST['pass'];
    $db_host = "localhost";
    $db_user = "root";
    $db_password = "";
    $db_name = "database";
    
    $db = mysql_connect($db_host, $db_user, $db_password);
    if (! $db)
    echo "Errore durante la connessiona la database.";
    
    mysql_select_db($db_name) or exit ("errore durante la selezione del database");
    
    $sqlcmd = "SELECT * ";
    $sqlcmd .= "FROM utenti ";
    $sqlcmd .="WHERE user='$utente' AND pass='$pass' ";
    $risultato = mysql_query( $sqlcmd );
    if (! $risultato) 
    exit ("errore nell'interrogazione: $sqlcmd");
    if (mysql_num_rows ($risultato)==0)
    {
    exit ("Utente o Password errati");
    $accesso="no";
    }
    else
    $accesso="ok";
    
    session_start();
    
    $_SESSION['accesso']=$accesso;
    
    ?>
    
    
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Documento senza titolo</title>
    </head>
    <body>
    <a href="pagina1.php"> pagina 1 </a>
    </body>
    </html>
    Pagina1

    Codice:
     <?php
    session_start();
    $accesso=$_SESSION['accesso'];
    if ($accesso!="ok")
    exit ("Accesso non effettuato");
    ?>
    
    
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Documento senza titolo</title>
    </head>
    <body>
    Pagina visibile
    <br />
    <a href="logout.php">logout</a>
    </body>
    </html>
    Pagina di logout:
    Codice:
    <?php
    session_start();
    session_destroy();
    ?>
    <html>
    sessione terminata
    </html>
    Accetto tutti i vostri commenti e aiuti!!
    Grazie

  2. #2
    User
    Data Registrazione
    Jan 2008
    Messaggi
    178
    La prima domanda che mi sorge è:
    Se non chiudo la connessione al database nella pagina accesso, quando passo alla pagina1 la connessione rimane aperta o la devo rifare? Per ora la chiudo ad ogni pagina e la riapro la pagina dopo
    Ultima modifica di drimmy; 04-02-08 alle 12:29

  3. #3
    ModSenior L'avatar di Thedarkita
    Data Registrazione
    Aug 2006
    Località
    Messina
    Messaggi
    7,001
    Segui Thedarkita su Twitter Aggiungi Thedarkita su Google+ Aggiungi Thedarkita su Facebook Aggiungi Thedarkita su Linkedin Visita il canale Youtube di Thedarkita
    La connessione va fatta in ogni pagina quindi conviene fare un file di configurazione ed includerlo in tutte le pagine

    per quanto riguarda lo script sarebbe più corretto scrivere:
    al posto di :
    Codice PHP:
    $sqlcmd .="WHERE user='$utente' AND pass='$pass' "
    questo:
    Codice PHP:
    $sqlcmd .="WHERE user='$_POST[utente]' AND pass='$_POST[pass]' "

    cosi eviti anche problemi con le impostazioni dei server

  4. #4
    User
    Data Registrazione
    Feb 2008
    Messaggi
    91
    attento devi filtrare gli imput seno è automatica una sqlinjection!

  5. #5
    ModSenior L'avatar di Thedarkita
    Data Registrazione
    Aug 2006
    Località
    Messina
    Messaggi
    7,001
    Segui Thedarkita su Twitter Aggiungi Thedarkita su Google+ Aggiungi Thedarkita su Facebook Aggiungi Thedarkita su Linkedin Visita il canale Youtube di Thedarkita
    Citazione Originariamente Scritto da GreyFox Visualizza Messaggio
    attento devi filtrare gli imput seno è automatica una sqlinjection!

    ha scritto che per adesso tralasciava la sicurezza...

  6. #6
    User
    Data Registrazione
    Jan 2008
    Messaggi
    178
    Citazione Originariamente Scritto da GreyFox Visualizza Messaggio
    attento devi filtrare gli imput seno è automatica una sqlinjection!
    Adesso cerco di ottimizare anche la sicurezza, puoi spiegarmi meglio? grazie

  7. #7
    ModSenior L'avatar di Thedarkita
    Data Registrazione
    Aug 2006
    Località
    Messina
    Messaggi
    7,001
    Segui Thedarkita su Twitter Aggiungi Thedarkita su Google+ Aggiungi Thedarkita su Facebook Aggiungi Thedarkita su Linkedin Visita il canale Youtube di Thedarkita
    Per la sicurezza devi filtrare i simboli come ' e " che posso modificarti la query

    puoi usare la funzione addslashes per aggiugnere gli \ davanti a questi simboli e quindi evitare questi codici dannosi

  8. #8
    User
    Data Registrazione
    Jan 2008
    Messaggi
    178
    puoi farmi un esempio? grazie

  9. #9
    ModSenior L'avatar di Thedarkita
    Data Registrazione
    Aug 2006
    Località
    Messina
    Messaggi
    7,001
    Segui Thedarkita su Twitter Aggiungi Thedarkita su Google+ Aggiungi Thedarkita su Facebook Aggiungi Thedarkita su Linkedin Visita il canale Youtube di Thedarkita
    Link alla guida ufficiale del php:
    it2.php.net/addslashes

  10. #10
    User
    Data Registrazione
    Jan 2008
    Messaggi
    178
    grazie appena ho tempo gli do un'occhiata!

  11. #11
    User
    Data Registrazione
    Feb 2008
    Messaggi
    91
    attento fai anche un filtraggio per simboli come % < > ' " * e nella pagina stessa che interroga il db perche senno possono essere bypassati editando una richiesta http manualmente...inoltre per evitare proxy o spammer utilizza o le lettere delle immagini (come quella per registrarti qui) oppure un'applet in java che prenda l'ip privato del visitatore ...

    un esempio di funzione per validare un campo puo essere:

    Codice PHP:
    function quote_smart($value)
    {

    if (
    get_magic_quotes_gpc()) {
    $value stripslashes($value);
    }

    if (!
    is_numeric($value)) {
    $value "'" mysql_real_escape_string($value) . "'";
    }
    return 
    $value;


  12. #12
    User
    Data Registrazione
    Jan 2008
    Messaggi
    178
    Citazione Originariamente Scritto da GreyFox
    attento devi filtrare gli imput seno è automatica una sqlinjection!
    Ho approfondito l'argomento e una sqlinjection è molto pericolosa quanto semplice da fare, quindi è indispensabile metterla fuori uso. Adesso vedo cosa mi avete consigliato di fare e provo a sistemarlo

    Citazione Originariamente Scritto da GreyFox
    attento fai anche un filtraggio per simboli come % < > ' " * e nella pagina stessa che interroga il db perche senno possono essere bypassati editando una richiesta http manualmente.
    Come faccio?


    Citazione Originariamente Scritto da GreyFox
    inoltre per evitare proxy o spammer utilizza o le lettere delle immagini (come quella per registrarti qui) oppure un'applet in java che prenda l'ip privato del visitatore
    A questo penserò quando preparo la pagina per le registrazioni.

  13. #13
    User
    Data Registrazione
    Jan 2008
    Messaggi
    178
    Al termine del lavoro posto il codice ben commentato di tutte le pagine. Così da poter essere utilizzata da tutti coloro che vogliono una sezione privata nel proprio sito.

  14. #14
    User
    Data Registrazione
    Jan 2008
    Messaggi
    178
    Citazione Originariamente Scritto da Thedarkita Visualizza Messaggio
    La connessione va fatta in ogni pagina quindi conviene fare un file di configurazione ed includerlo in tutte le pagine

    per quanto riguarda lo script sarebbe più corretto scrivere:
    al posto di :
    Codice PHP:
    $sqlcmd .="WHERE user='$utente' AND pass='$pass' "
    questo:
    Codice PHP:
    $sqlcmd .="WHERE user='$_POST[utente]' AND pass='$_POST[pass]' "
    cosi eviti anche problemi con le impostazioni dei server

    Ho fatto il file config.php che includo in tutte le pagine, per la query non ho capito la differenza...

  15. #15
    User
    Data Registrazione
    Jan 2008
    Messaggi
    178
    Ho aggiunto il filtro addslashes per evitare la sqlinjection e in effetti funziona, riporto il codice completo della pagina accesso:

    Codice PHP:
    <?php
    $utente
    =$_POST['utente'];
    $pass=$_POST['pass']; // ricevo i dati dal form di login
    $utenteaddslashes  ($utente); 
    $passaddslashes  ($pass); //filtraggio utente e pass per evitare sqlinjection

    include 'configdb.php';

    $sqlcmd "SELECT * ";
    $sqlcmd .= "FROM utenti ";
    $sqlcmd .="WHERE user='$utente' AND pass='$pass' "//select per ricerca dell'user & pass all'interno della tabella
    $risultato mysql_query$sqlcmd ); // invio query al db
    if (! $risultato)   //controllo interrogazione database
    exit ("errore nell'interrogazione: $sqlcmd");

    if (
    mysql_num_rows ($risultato)==0)  //controllo presenza user e pass nella tabella
    {
    exit (
    "Utente o Password errati");
    $accesso="no";  //accesso non effettuato
    }
    else
    $accesso="ok";  //accesso effettuato

    session_start();
    $_SESSION['accesso']=$accesso;  //salva lo stato di accesso per le seguenti pagine della sessione e il nome utente e pass
    $_SESSION['utente']=$utente;
    $_SESSION['pass']=$pass;

    mysql_close($db);
    ?>

+ Rispondi alla Discussione
Pagina 1 di 2 12 UltimaUltima

Tag per Questa Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.