• User Attivo

    @GreyFox said:

    attento devi filtrare gli imput seno è automatica una sqlinjection!

    Adesso cerco di ottimizare anche la sicurezza, puoi spiegarmi meglio? grazie


  • ModSenior

    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


  • User Attivo

    puoi farmi un esempio? grazie


  • ModSenior

    Link alla guida ufficiale del php:
    it2.php.net/addslashes


  • User Attivo

    grazie appena ho tempo gli do un'occhiata! :ciauz:


  • User

    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:

    [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;
    }
    [/php]


  • User Attivo

    @GreyFox said:

    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

    @GreyFox said:

    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?

    @GreyFox said:

    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.


  • User Attivo

    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.


  • User Attivo

    @Thedarkita said:

    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 :
    [php]$sqlcmd .="WHERE user='$utente' AND pass='$pass' ";[/php]questo:
    [php]$sqlcmd .="WHERE user='$_POST[utente]' AND pass='$_POST[pass]' ";[/php]
    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...


  • User Attivo

    Ho aggiunto il filtro addslashes per evitare la sqlinjection e in effetti funziona, riporto il codice completo della pagina accesso:

    [php]
    <?php
    $utente=$_POST['utente'];
    $pass=$_POST['pass']; // ricevo i dati dal form di login
    $utente= addslashes ($utente);
    $pass= addslashes ($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);
    ?>
    [/php]


  • Consiglio Direttivo

    Ciao drimmy
    Dato che stai iniziando a parlare di sicurezza allora non dimenticare di criptare la password con md5 😉


  • Moderatore

    sha1 anche 🙂

    se vogliamo rimanere nel ragionamento di criptazione 🙂


  • User Attivo

    ciao, quando applicherò il lavoro sperimentale che sto facendo ad un sito vero e proprio penso che avrò a disposizione il certificato SSL, c'è qualcosa da fare nella programmazione per quanto riguarda SSL? come criptazione password se creo un algoritmo mio di criptazione? tipo moltiplico per 5,435 (un numero a caso) quando vado a inserire la pass nel db e, quando la vado a leggere, divido per lo stesso numero.


  • ModSenior

    le codifiche md5 e sha1 sono irreversibili e quindi dovrebbero essere più sicure...

    per quanto riguarda il certificato negli script non devi fare niente