Visualizzazione risultati 1 fino 5 di 5

Discussione: Problema inserimento dati MySQL tramite PHP

  1. #1
    Guest

    Predefinito Problema inserimento dati MySQL tramite PHP

    Salve,
    inserendo una e-mail nel campo di questo form:
    Codice:
    <form name="form" method="post" action="file.php">
    E-mail:<br /> <input type="text" name="email" /> <br />
    Test: <br />
    <textarea style="width: 600px; height: 250px; resize: none;" name="messaggio"></textarea> <br />
    <input type="submit" class="button" value="Invia">
    </form>
    PHP:
    Codice:
    require("admin/accesses/mysql.php");
    $email =  $_POST['email'];
    $messaggio = $_POST['messaggio'];
    				
    if($email = "" and $messaggio = "") {
    die("Inserisci una richiesta di preventivo e una e-mail valida.");
    } else {
    $sql="INSERT INTO `table` (`ID`, `Email`, `Messaggio`)  VALUES (NULL, '$email', '$messaggio')";
    $result=mysql_query($sql);
    if($result == 1){
    header("location:admin/file.php");
    } else{
    die("Error");
    }
    }
    Nella tabella 'table' la colonna 'Email' rimane vuota.
    Sapete da cosa è dovuto questo problema e come risolvere?

    Grazie in anticipo

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Gli operatori che hai usato nel primo if sono di assegnazione, probabilmente volevi usare quelli di confronto (come quello nel secondo if).
    Ad ogni modo, lo script è vulnerabile ad attacchi del tipo SQL injection, un malintenzionato potrebbe avere il completo controllo in scrittura (e magari sfruttando altri script anche quello in lettura) del database.
    Ultima modifica di karl94 : 13-09-2013 alle ore 18.10.59

  3. #3
    Guest

    Predefinito

    Nella riga:
    $sql="INSERT INTO `table` (`ID`, `Email`, `Messaggio`) VALUES (NULL, '$email', '$messaggio')";

    sono giusti i primi 8 apici?

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Sì, ma non è una questione di apici: la variabile email (e anche l'altra) è fornita direttamente dall'esterno e tu non esegui alcun tipo di controllo sul contenuto di questa. Quindi se un malintenzionato fornisce per questo campo un appositamente studiato, che ad esempio presenti un apice, il quale verrebbe interpretato come fine della stringa, capisci bene che può inserire qualsiasi cosa all'interno della query, come una subquery che cancelli l'intero database.
    Per risolvere bisogna effettuare il cosiddetto escape, c'è una funzione apposita per le query MySQL in PHP.
    Ultima modifica di karl94 : 13-09-2013 alle ore 20.46.04

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Gli operatori che hai usato nel primo if sono di assegnazione, probabilmente volevi usare quelli di confronto (come quello nel secondo if).
    Ad ogni modo, lo script è vulnerabile ad attacchi del tipo SQL injection, un malintenzionato potrebbe avere il completo controllo in scrittura (e magari sfruttando altri script anche quello in lettura) del database.
    Grazie mille, ora lo script è funzionante.

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Sì, ma non è una questione di apici: la variabile email (e anche l'altra) è fornita direttamente dall'esterno e tu non esegui alcun tipo di controllo sul contenuto di questa. Quindi se un malintenzionato fornisce per questo campo un appositamente studiato, che ad esempio presenti un apice, il quale verrebbe interpretato come fine della stringa, capisci bene che può inserire qualsiasi cosa all'interno della query, come una subquery che cancelli l'intero database.
    Per risolvere bisogna effettuare il cosiddetto escape, c'è una funzione apposita per le query MySQL in PHP.
    Comunque non so, ho provato ad "auto-injectarmi" ma non ci sono riuscito.
    In ogni caso, per sicurezza, cercherò di controllare e studiare questa funzione cercando su Google e se magari ti va di accennarmi qualcosina :)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •