Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Accessibilità , sicurezza codice.

    Ciao a tutti , ho completato un codice php per la registrazione.
    Adesso ptoreste consigliarmi, se ci sono altri controlli da fare per rendere il codice più sicuro e più accessibile ?

    Di funzionare , funziona xD
    Potete provarlo , in funzione di prova su
    http://www.narakuprova.altervista.org/reg.php

    Per test.
    Codice PHP:
    <?php 
    /* Conneto al database */
    $connessione mysql_connect("localhost","narakuprova","******")or die("Connessione non riuscita: " mysql_error());
    mysql_select_db("my_narakuprova"$connessione) or die("Errore nella selezione del database");

    /* Recupero i dati */
    $nome $_POST['nome'];
    $pass $_POST['pass'];
    $mail $_POST['mail'];
    $villo $_POST['villaggio'];
    $sex $_POST['genere'];

    /* Assegno variabile di avanzamento */
    $ok false;

    /* 1] Verifico che tutti i campi SONO compilati */
    if (empty($nome) || empty($pass) || empty($mail) || empty($villo) || empty($sex)) 
    {
        echo 
    " Devi inserire tutti i campi per poter completare la registrazione ";
        
    $ok false;
    }

    /* 1] Se tutti i campi NON SONO compilati */
    else
    {
        
    $ok true;
    }

        if ( 
    $ok === true 
        {
            
    /* 2a] Verifiche E-MAIL */
            /* 2]a Verificio che l'e-mail sia valida */
            
    $pos strpos($mail"@");
            
    $pos2 strpos($mail" ");
                if (
    $pos === false || $pos2 != false
                {
                    echo 
    "La tua mail non è valida";
                    
    $ok false;
                }    
                
            
    /* 2]b Verificio che l'e-mail non sia già contenuta nel database*/    
                
    $mailcontrollo " SELECT email FROM personaggio WHERE email = '$mail'";
                
    $risultatomail mysql_query ($mailcontrollo,$connessione);
                
    $trovatimail mysql_num_rows($risultatomail);
                if (
    $trovatimail 0
                {
                    
    $ok false;
                    echo 
    " L'indirizzo e-mail è già associato ad un altro account ";
                }
                
            
    /* 2b] Verificio che la password sia min 4 caratteri e max 8 */
            
    $lungpass strlen($pass);
                if (
    $lungpass || $lungpass >)
                {
                    echo 
    "</br>" "La tua password non è valida";
                    
    $ok false;
                }
                
            
    /* 2c] Verifiche Nome */
            /* 2c]a Verifico che il nome sia compreso fra le 5 e le 12 lettere */
            
    $lungnome strlen($nome);
                if (
    $lungpass || $lungpass >12 )
                {
                    echo 
    "</br>" "Il tuo nome non è valido";
                    
    $ok false;
                }
                
            
    /* 2c]b Verificare che il nome non sia presente nel database */
                
    $nomecontrollo "SELECT nome FROM personaggio WHERE nome = '$nome'";
                
    $risultatonome mysql_query($nomecontrollo,$connessione);
                
    $trovatinome mysql_num_rows($risultatonome);
                if ( 
    $trovatinome 0
                {
                    
    $ok false;
                    echo 
    "</br>" "Il nome è già utilizzato ";
                }
                
        }
        

    /* 3] Se tutto è ok , Inseriamo */
    if ($ok == true)
        {
        
    $inserisci" INSERT INTO personaggio ( nome , pass , email , sesso ) VALUES ( '$nome' , '$pass' , '$mail' , '$sex' )";
        
    $insquery mysql_query($inserisci,$connessione);
        echo 
    " Registrazione effettuata con successo ";
        }

    ?>

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    consiglio di cominciare con una bella lettura su questi argomenti: sql injection, input sanitization, email regex...

  3. #3
    Lo stavo scrivendo io ghgh.

    Non hai messo nessun controllo, ovvero una sql injection ti fa fuori.

    Dovresti fare tipo:


    Codice PHP:
    $email htmlspecialchars($_POST['email']); 
    poi nel controllo...



    Codice PHP:
    $mailcontrollo " SELECT email FROM personaggio WHERE email='".mysql_real_escape_string($mail)."'"
    Social Network in costruzione.. Misto tra Twitter e Facebook.. Twitbook o facetter?

  4. #4
    1) il controllo di quella mail è inutile che se ti ci metto due @ mi daresti cmq valida la mail

    2) non controlli che nome e pass non contengano spazi... per come hai scritto tu posso inserire un nome di 7 spazi vuoti e tu me lo daresti valido

    3) non controlli nulla per evitare sql injiection... col tuo codice se uno inserisce un apice in nome o pass o mail ti salta tutto

    in generale, è tutto tranne che sicuro quel codice... poi Accessibilità che intendevi?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Perfetto , ora mi dice sempre = registrazione effettuata con successo ç_ç ( però non inserisce nel database )
    Non visualizza gli errori , tipo se metto 2 @@
    Ho inserito vari controlli , un espressione regolare.

    Codice PHP:
    <?php 
    /* Conneto al database */
    $connessione mysql_connect("localhost","narakuprova","****")or die("Connessione non riuscita: " mysql_error());
    mysql_select_db("my_narakuprova"$connessione) or die("Errore nella selezione del database");

    /* Funzione per verificare dati ricevuti */
    function verifica($value)
    {
    if (
    get_magic_quotes_gpc())
      {
      
    $value stripslashes($value);
      }
    if (!
    is_numeric($value))
      {
      
    $value "'" mysql_real_escape_string($value) . "'";
      }
    return 
    $value;
    }


    /* Recupero i dati */
    $nome verifica ($_POST['nome']);
    $pass verifica ($_POST['pass']);
    $mail verifica ($_POST['mail']);
    $villo verifica ($_POST['villaggio']);
    $sex verifica ($_POST['genere']);

    /* Assegno variabile di avanzamento */
    $ok false;

    /* 1] Verifico che tutti i campi SONO compilati */
    if (empty($nome) || empty($pass) || empty($mail) || empty($villo) || empty($sex)) 
    {
        echo 
    " Devi inserire tutti i campi per poter completare la registrazione ";
        
    $ok false;
    }

    /* 1] Se tutti i campi SONO compilati */
    else
    {
        
    $ok true;
    }

        if ( 
    $ok === true 
        {
            
    /* 2a] Verifiche E-MAIL */
            /* 2]a Verificio che l'e-mail sia valida */
            
    $posmail1 strpos($mail" ");
                if (
    $posmail1 != false
                {
                    echo 
    "La tua mail non è valida";
                    
    $ok false;
                }    
                
                
    $cercare "/[@]{1}/" ;
                if ( 
    preg_match ($cercare,$mail))
                {
                    
    $ok true;
                }
                else 
                {
                    
    $ok false;
                    echo 
    " contiene troppe chiocciole ";
                }
                
                    
                
            
    /* 2]b Verificio che l'e-mail non sia già contenuta nel database*/    
                
    $mailcontrollo " SELECT email FROM personaggio WHERE email = '$mail'";
                
    $risultatomail mysql_query ($mailcontrollo,$connessione);
                
    $trovatimail mysql_num_rows($risultatomail);
                if (
    $trovatimail 0
                {
                    
    $ok false;
                    echo 
    " L'indirizzo e-mail è già associato ad un altro account ";
                }
                
            
    /* 2c] Verifiche PASS */
            /* 2b]a Verificio che la password sia min 4 caratteri e max 8 */
            
    $lungpass strlen($pass);
                if (
    $lungpass || $lungpass >)
                {
                    echo 
    "</br>" "La tua password non è valida";
                    
    $ok false;
                }
                
            
    /* 2b]b Verifico che la pass non contenga spazi */
                
    $pospass1 strpos($pass" ");
                if (
    $pospass1 != false
                {
                    echo 
    "La tua pass non è valida";
                    
    $ok false;
                }    
                
            
    /* 2c] Verifiche Nome */
            /* 2c]a Verifico che il nome sia compreso fra le 5 e le 12 lettere */
            
    $lungnome strlen($nome);
                if (
    $lungpass || $lungpass >12 )
                {
                    echo 
    "</br>" "Il tuo nome non è valido";
                    
    $ok false;
                }
                
            
    /* 2c]b Verificare che il nome non sia presente nel database */
                
    $nomecontrollo "SELECT nome FROM personaggio WHERE nome = '$nome'";
                
    $risultatonome mysql_query($nomecontrollo,$connessione);
                
    $trovatinome mysql_num_rows($risultatonome);
                if ( 
    $trovatinome 0
                {
                    
    $ok false;
                    echo 
    "</br>" "Il nome è già utilizzato ";
                }
            
    /* 2c]c Verifico che il nome non contenga spazi */
                
    $posnome1 strpos($nome" ");
                if (
    $posnome1 != false
                {
                    echo 
    "Il tuo nome non è valido";
                    
    $ok false;
                }    
                
                
        }
        

    /* 3] Se tutto è ok , Inseriamo */
    if ($ok == true)
        {
        
    $inserisci" INSERT INTO personaggio ( nome , pass , email , sesso ) VALUES ( '$nome' , '$pass' , '$mail' , '$sex' )";
        
    $insquery mysql_query($inserisci,$connessione);
        echo 
    " Registrazione effettuata con successo ";
        }

    ?>

  6. #6
    Qualcuno mi può aiutare?
    Novità :
    se elimino la verifica con la funzione
    Codice PHP:
    /* Funzione per verificare dati ricevuti */
    function verifica($value)
    {
    if (
    get_magic_quotes_gpc())
      {
      
    $value stripslashes($value);
      }
    if (!
    is_numeric($value))
      {
      
    $value "'" mysql_real_escape_string($value) . "'";
      }
    return 
    $value;
    }


    /* Recupero i dati */
    $nome $_POST['nome'];
    $pass $_POST['pass'];
    $mail $_POST['mail'];
    $villo $_POST['villaggio'];
    $sex $_POST['genere'];

    /* Li verifico */
    $nome verifica($nome);
    $pass verifica($pass);
    $mail verifica($mail);
    $villo verifica($villo);
    $sex verifica($sex); 
    Lo script funziona tutto a meno di questa parte

    Codice PHP:
                $cercare "/[@]{1}/" ;
                if ( 
    preg_match ($cercare,$mail))
                {
                    
    $ok true;
                }
                else 
                {
                    
    $ok false;
                    echo 
    " La tua mail non è valida ";
                } 

  7. #7
    Utente di HTML.it L'avatar di Laxus
    Registrato dal
    Oct 2010
    Messaggi
    251
    La funzione verifica viene utilizzata male.
    Ora come ora, $nome,$pass saranno valorizzate in questo modo: 'miovalore'.
    Questa cosa ha delle conseguenze: empty darà sempre false (anche se il campo email lo lascio vuoto $mail conterrà questo: ''), inoltre la query insert verrebbe storpiata a causa di qualche ' di troppo

    Utilizza mysql_real_escape_string solo nelle query.

  8. #8
    Quindi la mail diverrebbe :
    Codice PHP:
    $mailcontrollo " SELECT email FROM personaggio WHERE email='".mysql_real_escape_string($mail)."'"
    il nome
    Codice PHP:
    $nomecontrollo "SELECT nome FROM personaggio WHERE nome = '".mysql_real_escape_string($nome)."'"
    e INSER TO?
    Codice PHP:
    $inserisci" INSERT INTO personaggio ( nome , pass , email , sesso ) VALUES ( '$nome' , '$pass' , '$mail' , '$sex' )"

  9. #9
    Utente di HTML.it L'avatar di Laxus
    Registrato dal
    Oct 2010
    Messaggi
    251
    Codice PHP:
    $inserisci"INSERT INTO personaggio ( nome , pass , email , sesso ) VALUES ( '".mysql_real_escape_string($nome)."' , '".mysql_real_escape_string($pass)."' , '".mysql_real_escape_string($mail)."' , '".mysql_real_escape_string($sex)."' )"

  10. #10
    Ed una è risolta , la seconda domanda ora che avevo postato ?
    La riprendo :

    Cosa sbaglio , che anche se metto @@@@@ me la accetta l'e-mail ?
    Codice PHP:
                            $cercare "/[@]{1}/" ;
                if ( 
    preg_match ($cercare,$mail))
                {
                    
    $ok true;
                }
                else 
                {
                    
    $ok false;
                    echo 
    " La tua mail non è valida ";
                } 

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.