Pagina 1 di 6 12345 ... UltimaUltima
Risultati da 1 a 10 di 58

Discussione: Miglioramento controlli su input

  1. #1
    Paperino78 è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    219

    Miglioramento controlli su input

    Ho creato un form molto leggero e giusto di prova per poi migliorarlo. di seguito il codice.
    Codice PHP:
    <?php 

        
    include 'header.php';
        
    ?>

        <div id="wrapper">
        
        <?php 

            
    if(!isset($_GET['passkey'])){
            
                if(!isset(
    $_POST['invia'])){ ?>
                
                    <form method="post" action="#" id="formregistrazione">
                        
                        <ul>
                            <li><label for="username">Username</label>
                                <input type="text" name="username" id="username" />
                            </li>
                            <li>
                                <label for="password1">Password</label>
                                <input type="password" name="password1" id="password1" />
                            </li>
                            <li>
                                <label for="password2">Ripeti Password</label>
                                <input type="password" name="password2" id="password2" />
                            </li>
                            <li>
                                <label for="email">Email</label>
                                <input type="text" name="email" id="email" />
                            </li>
                        </ul>
                            <input type="submit" name="invia" id="registrati" value="Registrati" />
                    </form>
                
        <?php    } else {
                    
                    
    // creazione di un codice di conferma
                    
    $codiceconferma md5(uniqid(rand()));
                    
                    
    // Valori del form
                    
                    
    $username mysql_real_escape_string($_POST['username']);
                    
    $password1 mysql_real_escape_string($_POST['password1']);
                    
    $password2 mysql_real_escape_string($_POST['password2']);
                    
    $email mysql_real_escape_string($_POST['email']);
                
                    
    // controllo campi vuoti e password
                    
                    
    if($username == "" || $email == ""){
                        echo 
    "Devi riempire tutti i campi";
                    }elseif(
    $password1 == "" || $password2 == ""){
                        echo 
    "Devi riempire tutti i campi";
                    }elseif(
    $password2 != $password1){
                        echo 
    "Le password devono coincidere";
                    }else{
                        
                        
    $recuperauseremail mysql_query("SELECT id FROM utenti WHERE username='$username' OR email='$email'");    
                        
    $contausermail mysql_num_rows($recuperauseremail);
                        
                        if(
    $contausermail 0){
                        
                            echo 
    "Nome utente o email già disponibili";
                        
                        } else {
                        
                            
    // Invia dati alla tb utenti_temp
                            
                            
    $inviautentitemp mysql_query("INSERT INTO utenti_temp (codiceconferma, username, password, email) VALUES ('$codiceconferma', '$username', '$password2', '$email')");
                            
                            if(
    $inviautentitemp){
                                
                                
    $to=$email;
                                
    $subject="Conferma la Registrazione";
                                
    $header="Da: Amministratore";
                                
    $message="Ecco il tuo codice di attivazione \r\n";
                                
    $message.="Clicca sul link per confermare la registrazione \r\n";
                                
    $message.="http://siti/Biblionet%20test%20MySql/register.php?passkey=$codiceconferma";
                                
                                
    $sentmail=mail($to,$subject,$message,$header);
                            
                            }
                            
                            if(
    $sentmail){
                            
                                echo 
    "Per completare la registrazione controlla la tua casella di posta elettronica e clicca sul link di attivazione.";
                                
                            }else{
                            
                                echo 
    "Errore, link di attivazione non inviato.";
                            
                            }
                        
                        }
                    }
                    
                }
            
            } else {
                
                
    $passkey $_GET['passkey'];
                
                
    $sqlrecuperauser "SELECT * FROM utenti_temp WHERE codiceconferma = '$passkey'";
                
    $risultatouser mysql_query($sqlrecuperauser);
                
                if(
    $risultatouser) {
                
                    
    $contauser mysql_num_rows($risultatouser);
                    
                    if(
    $contauser == 1){
                    
                        
    $rows mysql_fetch_array($risultatouser);
                        
    $username $rows['username'];
                        
    $email $rows['email'];
                        
    $password $rows ['password'];
                        
                        
    $passwordcript md5($password);
                        
                        
    $sqlconfermauser mysql_query("INSERT INTO utenti (username, password, email) VALUES ('$username', '$passwordcript', '$email')");
                        
                        if (
    $sqlconfermauser) {
                        
                            echo 
    "Il tuo account è stato attivato con successo";
                            
    $sqleliminadati mysql_query("DELETE FROM utenti_temp WHERE codiceconferma = '$passkey'");
                        
                        } else {
                        
                            echo 
    "Errore!";
                        
                        }
                    
                    }
                
                }
                
            }

        
    ?>
        
        
        </div>
        
        
    </body>
    </html>
    ed il file della pagina di login
    Codice PHP:
    <?php

        
    include 'header.php';

    ?>

        <div id="wrapper">
        
            <?php
                
                $p 
    $_GET['azione'];
                
                
    // Azione per il login
                
    if($p == "login"){
                    
                    if(!isset(
    $_POST['invia'])){ ?>
                
                        <form method="post" action="#" id="formlogin">
                        
                            <label for="username">Username</label>
                            <input type="text" name="username" id="username" /><br>                    
                            <label for="password">Password</label>
                            <input type="password" name="password" id="password" /><br>
                            <input type="submit" name="invia" id="login" value="Accedi" />
                        
                        </form>
                        
    <?php            } else {
                                
                        
    $username mysql_real_escape_string($_POST['username']);
                        
    $password mysql_real_escape_string($_POST['password']);
                        
                        if(
    $username == "" || $password == ""){
                        
                            echo 
    "Devi compilare tutti i campi";
                            
                        } else {
                            
                            
    $password_crypt md5($password);
                                    
                            
    $recuperadati mysql_query("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_crypt'");
                                    
                            
    $verificadati mysql_num_rows($recuperadati);
                                    
                            if(
    $verificadati == 1) {
                                        
                                
    $sessione mysql_fetch_array($recuperadati);
                                
    $_SESSION['utente'] = $sessione['username'];
                                echo 
    "Login effettuato con successo!";
                                
    header("Refresh: 2; URL= index.php");    
                                
                            } else {
                                        
                                echo 
    "Dati non presenti nel database!";
                                
                            }
                                    
                        }
                                
                    }
                    
                    
                
    // Azione del logout                    
                
    } elseif ($p == "logout"){
                        
                    
    session_destroy();
                    echo 
    "Logout effettuato con successo!";
                    
    header("Refresh: 2; URL= index.php");                
                
                }
                
                
                
            
    ?>
            


        </div>

    </body>
    </html>
    Come potrei migliorarlo? Come potrei migliorare il controllo su gli input dopo il suggerimento di borgo italia ?

    Grazie e tutti

  2. #2
    L'avatar di f107
    f107 è offline Utente del Forum
    Data Registrazione
    Aug 2012
    Messaggi
    71
    Codice PHP:
    $passkey $_GET['passkey']; 
    $sqlrecuperauser "SELECT * FROM utenti_temp WHERE codiceconferma = '$passkey'"
    ATTENZIONE!!!
    Secondo me si fa una SQL injection in 2 secondi...
    Ultima modifica di f107; 09-08-2012 alle 02:24
    http://www.linkedin.com/pub/matteo-barison/53/289/831 :: http://smarriti.org
    http://link2me.it/network/7172/matteo-barison/index.htm :: http://infinitymetin.net

  3. #3
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,201
    ciao
    intanto per la passkey
    sistema più semplice:
    Codice PHP:
    <?php
    //..........
    } else {
        
    $passkey htmlspecialchars($_GET['passkey']); 
    //...eccetera
    ?>
    oppure dato che è mdcinquata quindi dovrebbe essere solo caratteri asci alfanumerici
    Codice PHP:
    <?php
    //..........
    } else {
        
    $passkey htmlspecialchars($_GET['passkey']); 
        if(
    preg_match("/^[A-Za-z0-9]$/"$passkey )){
            
    //faccio quello che devo fare
        
        
    }else{
            echo 
    "errore: la chiave non è corretta";
            
    //e un rimando automatico a dove vuoi
        
    }
        
     
    //...eccetera
    ?>

  4. #4
    Paperino78 è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    219
    Buongiorno, potrebbe andare bene in questo modo secondo voi?

    come dice borgo faccio il controllo e poi se corrisponde prosegue nel caso non fosse giusto esce l'errore di contattare un responsabile
    Codice PHP:
    else {
                
                
    $passkey htmlspecialchars($_GET['passkey']); 
                if(
    preg_match("/^[A-Za-z0-9]$/"$passkey)){       // Qua controllo se corrisponde
                    
                
    $sqlrecuperauser "SELECT * FROM utenti_temp WHERE codiceconferma = '$passkey'"// qua se positivo all'if recupero i dati dal db e proseguo
                
    $risultatouser mysql_query($sqlrecuperauser);
                
                } else {
                    
                    echo 
    "C'è stato un errore nella registrazione, riprovare o mandare una mail al gruppo."// se non coincide, lascio un avviso.
                    
                
    } if($risultatouser) {
                
                    
    $contauser mysql_num_rows($risultatouser);
                    
                if(
    $contauser == 1){
                    
                        
    $rows mysql_fetch_array($risultatouser);
                        
    $username $rows['username'];
                        
    $email $rows['email'];
                        
    $password $rows ['password'];
                        
                        
    $passwordcript md5($password); 
    quello che non mi è chiaro è che cosa dovrebbe succedere nel caso la funzione preg_match non dia esito positivo. Da cosa può dipendere visto che è un semplice controllo. Notare che chi si registra viene prima inserito in una tabella utenti temporanea dove la pass è in chiaro e dopo conferma via mail inserito nella tabella utenti quella definitiva con pass criptata.
    Inoltre stavo pensando di mandare una mail di conferma ed avvenuta registrazione all'utente con user e pass in chiaro. Però dopo la conferma via mail la pass viene criptata. Come potrei fare?
    Grazie a tutti

  5. #5
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,201
    ciao
    è che cosa dovrebbe succedere nel caso la funzione preg_match non dia esito positivo
    se è negativo vuol dire che qualcuno ha cercato di accedere fraudolentemente, quindi metti un riinvio immediato e automatico ad una pagina (es alla home)
    devi poi fare le varie operazioni solo e solamente solo se il controllo è stato positivo.


    per gli altri controlli io farei così, ti metto i pattern solo per caratteri alfanumerici se vuoi altri caratteri modificali
    Codice PHP:
    <?php
    //$t = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
    function ver_testo($t,$mi,$m){
        if(
    preg_match("/^[A-Za-z0-9]{$mi,$m}$/"$t)){
            
    //testo ok
            
    return TRUE;
        }else{
            return 
    FALSE;
        }
    }
    //......       
    // creazione di un codice di conferma
    $codiceconferma md5(uniqid(rand()));
    // Valori del form
    $username trim($_POST['username']);
    $password1 trim($_POST['password1']);
    $password2 trim($_POST['password2']);
    $email trim($_POST['email']);
    //metto a vuoto messagggio di errore
    $ok_ko="";
    if(!
    ver_testo($username,3,8)){$ok_ko.="username non corretto<br />";}
    if(!
    ver_testo($password1,6,12)){$ok_ko.="prima password non corretta<br />";}
    if(!
    ver_testo($password2,6,12)){$ok_ko.="seconda password non corretta<br />";}
    if(
    $password1 != $password2){$ok_ko.="le password non coincidono<br />";}
    if(!
    filter_var($emailFILTER_VALIDATE_EMAIL)){$ok_ko.="indirizzo email non valido<br />";}
    if(
    $ok_ko==""){//se è rimasto vuoto non ci sono errori
        //fai quello che devi fare
    }else{
        echo 
    $ok_ko;
        
    //ritorno a dove vuoi tu es.
        //header("location: pagina_che_vuoi_tu.php");
    }
    ?>
    poi non manderei la pass per email (non si sa mai chi la riceve e/o la legga). del resto quando uno si iscrive scrive lui la pass quindi metti un avviso di ricordarsela e poi la passi dalla temporanea alla tabella utenti definitiva così com'è

  6. #6
    Paperino78 è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    219
    Ok grasiasss.
    Potrei inserire in modulo recupera password nel caso l'utente se la sia dimenticata. Ho trovato su questo sito un utilissimo articolo prpoprio sul recupero password tramite form. Analizzo il tuo commento e provo.
    Comunque ragazzi fare tutto da se in pochissimo tempo e senza qualcuno che ti dia una mano, eccezione fatta per questo forum, è veramente complicato. Ma ho davanti ancora 15 gg di ferie forzate.

  7. #7
    Paperino78 è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    219
    Ma le cariabili $t, $mi, $m non devo dichiararle?
    Codice PHP:
    //$t = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
    function ver_testo($t,$mi,$m){
        if(
    preg_match("/^[A-Za-z0-9]{$mi,$m}$/"$t)){
            
    //testo ok
            
    return TRUE;
        }else{
            return 
    FALSE;
        }


  8. #8
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,201
    ciao
    ehem, ehm...
    io grauderei un po' come funziano le funzioni.
    quelle che tu chiami variabili (quelle scritte tra le parentesi) sono diciamo dei "segnaposti" che vengono in seguito sostituiti quando utilizzi la funzione
    ver_testo($username,3,8)

  9. #9
    Paperino78 è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    219
    Citazione Originariamente Scritto da borgo italia Visualizza Messaggio
    ciao
    ehem, ehm...
    io grauderei un po' come funziano le funzioni.
    quelle che tu chiami variabili (quelle scritte tra le parentesi) sono diciamo dei "segnaposti" che vengono in seguito sostituiti quando utilizzi la funzione
    ver_testo($username,3,8)

    e lo so sono un novello!!! Sorry. E' che ci sono così tante cose da controlloare e imparare che diciamo ho un pò di confusin in testa. Visto che il controllo della lunghezza di username pass ed email lo faccio tramite un file javascript secondo te è inutile questo?
    Codice PHP:
    //$t = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
    function ver_testo($t,$mi,$m){
        if(
    preg_match("/^[A-Za-z0-9]{$mi,$m}$/"$t)){
            
    //testo ok
            
    return TRUE;
        }else{
            return 
    FALSE;
        } 
    Il file jS è questo
    Codice PHP:
    // JavaScript Document
    jQuery(document).ready(function($){
        
        
    // Validazione
        
        
    $("*formregistrazione").validate({
            
            
    // regole
            
    rules:{
                
    username:{
                    
    requiredtrue,
                    
    minlength4,
                    
    maxlength10
                
    },
                
                
    password1:{
                    
    requiredtrue,
                    
    minlength:4,
                    
    maxlength:12,
                },
                
                
    password2:{
                    
    requiredtrue,
                    
    equalTo:"#password1"
                
    },
                
                
    email:{
                    
    requiredtrue,                
                    
    emailtrue
                
    },
                
            },
            
    //messaggi errore    
            
            
    messagge:{
                
    username:{
                    
    required"Devi inserire il tuo Username",
                    
    minlength"L'username deve avere almeno 4 caratteri",
                    
    maxlength"L'username deve essere lungo al massimo 10 caratteri"
                
    },
                
                
    password1:{
                    
    required"Devi inserire la password",
                    
    minlength:"La password deve essere lunga almeno 4 caratteri",
                    
    maxlength:"La password deve essere lunga almeno 12 caratteri",
                    
                },
                
                
    password2:{
                    
    required"Inserisci la password",
                    
    equalTo:"Le password devono conincidere"
                
    },
                
                
    email:{
                    
    required"Devi inserire la mail",                
                    
    email"Inserisci una email valida"
                
    },
                
                
                
            },
            
        });
        
        
        
        
        }) 

  10. #10
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,201
    ciao
    qualsiasi controllo js (lato client) può essere facilmente superato, quelli lato server (php opera lato server) molto più difficilmente.
    i controlli lato client hanno solo il vantaggio di essere più scenografici

Pagina 1 di 6 12345 ... UltimaUltima

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
  •