• User Attivo

    Qualcuno saprebbe indicarmi quali sono i controlli e come effettuarli per evitare le sql injection?

    Per il momento ho filtrato il codice che accetto dall'utente da tutti i caratteri speciali ; -- + ' ( ) = > < @ e poi i comandi SQL SELECT, INSERT, CREATE, DELETE, FROM, WHERE, OR, AND, LIKE, EXEC, SP_, XP_, SQL, ROWSET, OPEN, BEGIN, END, DECLARE.

    Ma cosa altro posso fare?


  • User Attivo

    Come ho scritto prima, basta usare la funzione* *mysql_real_escape_string di PHP:
    [php]$sql = 'INSERT INTO tabella SET campo=''.mysql_real_escape_string($valore).''';[/php]


  • User

    ciao a tutti,
    credo di avere anch'io lo stesso problema, per questo vi scriverei il codice che ho utilizzato per pubblicare il form sul sito. Riuscireste gentilmente ad indicarmi dove scrivere esattamente la funzione mysql_real_escape_string?

    $dbcnx = @mysql_connect('server', 'user', 'password');
    if (!$dbcnx) {
    exit('<p>Unable to connect to the ' .
    'database server at this time.</p>');
    }

    if (!@mysql_select_db('m5761d1')) {
    exit('<p>Unable to locate the newsletter ' .
    'database at this time.</p>');
    }

    $name = $_POST['name'];
    $email = $_POST['email'];
    $sql = "INSERT INTO user SET
    name='$name',
    email='$email'";
    if (@mysql_query($sql)) {
    echo '<p>Newsletter sottoscritta</p>';
    } else {
    echo '<p>Error adding new user: ' .
    mysql_error() . '</p>';
    }

    ?>

    Grazie dell'aiuto.
    ciao
    Alex


  • User Attivo

    Puoi modificare queste due righe:
    [php]$name = $_POST['name'];
    $email = $_POST['email'];[/php]In questo modo:
    [php]$name = mysql_real_escape_string($_POST['name']);
    $email = mysql_real_escape_string($_POST['email']);[/php]


  • User

    Grazie matmattia,
    provvedo ad aggiornare lo script.
    ciao
    Alex


  • User

    Ciao ancora,
    ho inserito il codice e tutto sembra funzionare correttamente, ora vorrei aggiungere un controllo al campo mail che mi permetta di rifiutare una mail non valida. Qui nel forum ho trovato un codice di questo genere:

    controllo campo email - email valida

    if (!ereg("@",$UserEmail)){
    echo "<h3>Errore!</h3>
    Deve inserire una email valida

    La preghiamo di <A HREF="javascript:history.go(-1)">tornare indietro e correggere</A>. Grazie";
    exit;
    Mi sapreste dire se è corretto e dove inserirlo rispetto al codice precedente?
    Grazie ancora per l'aiuto


  • User Attivo

    Quel codice controlla (neanche nel modo migliore) se esiste la chicciola nella stringa.
    Subito prima del codice che ti ho modificato prima puoi mettere:
    [php]if(!isset($_POST['email']) || !is_string($_POST['email']) || trim($_POST['email'])=='' || !eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$",$_POST['email'])){
    echo '<h3>Errore!</h3><p>Deve inserire una email valida.<br />La preghiamo di <a href="#" onclick="history.go(-1);return false;">tornare indietro e correggere</a>. Grazie</p>';
    exit();
    }[/php]

    Fai qualche controllo perché non l'ho testato.


  • User

    Ciao Matmattia,
    finalmente ho provato ad inserire il codice di controllo che tu mi hai suggerito, ed effettivamente funziona correttamente, però, sia che la mail sia corretta che no, mi da sempre questa frase rpima della conferma della sottoscrizione della newsletter:

    Deprecated: Function eregi() is deprecated in D:\Programmi\wamp\www\provenewsletter\newuserdbesterno.php on line 26
    Newsletter sottoscritta

    sapresti dirmi dove sta l'errore?
    Tieni presente che ho fatto questa prova su localhost, non so se è questo che comporta il problema.
    Grazie ancora.
    ciao
    Alex


  • User Attivo

    Il problema è che la funzione eregi è deprecata dalla versione 5.3.0.
    Potresti risolvere modificando il codice in questo modo:
    [php]if(!isset($_POST['email']) || !is_string($_POST['email']) || trim($_POST['email'])=='' || !preg_match("#^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$#",$_POST['email'])){
    echo '<h3>Errore!</h3><p>Deve inserire una email valida.<br />La preghiamo di <a href="#" onclick="history.go(-1);return false;">tornare indietro e correggere</a>. Grazie</p>';
    exit();
    }[/php]


  • User

    Grazie matmattia,
    adesso sembra che funzioni tutto correttamente.
    Alla prossima.
    Ciao
    Alex