Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Criptare invio dati tramite GET - sql injection

    Salve a tutti,

    ho un dubbio: ho sentito parlare di sql injection e ho preparato un piccolo script per un amico dove ricercare e ordinare i risultati da un database Mysql.

    Vorrei sapere se tale script è sicuro e non è soggetto a violazioni di sicurezza .

    Vi posto lo script:




    <?php
    $conn = mysql_connect("127.0.0.1", "root", "") or die($errConnessione);
    mysql_select_db("database") or die($errSelezione);



    // Controllo se esite gia il numero di pagina, altrimenti lo setto a 1
    @$pag = mysql_real_escape_string($_GET["pag"]);
    if (isset($pag) == false || is_numeric($pag) == false || $pag < 1) {
    $pag = 1;
    }

    // Genero le variabili che stanno a rappresentare quali record da estrarre dal DB
    $fine = 2;
    $inizio = ($pag - 1) * $fine;
    ?>

    <form name="form1" method="get" action="prova.php">
    <div align="center">
    <table width="51%" border="2">
    <tr>
    <td width="52%">Marca</td>
    <td width="48%"><input name="marca" type="text" id="marca"></td>
    </tr>
    <tr>
    <td>Anno</td>
    <td><input name="anno" type="text" id="anno"></td>
    </tr>
    <tr>
    <td>Immagine</td>
    <td><input name="immagine" type="text" id="immagine"></td>
    </tr>
    <tr>
    <td>Prezzo</td>
    <td><input name="prezzo" type="text" id="prezzo"></td>
    </tr>
    <tr>
    <td colspan="2"><div align="center">
    <input type="submit" name="Submit" value="Ricerca">


    <input type="submit" name="Submit" value="Azzera paramentri di ricerca">
    </div></td>
    </tr>
    </table>


    </p></div>
    </form>





    <?php
    @$marca = mysql_real_escape_string($_GET['marca']);
    echo $marca;

    @$anno = mysql_real_escape_string($_GET['anno']);
    echo $anno;

    @$immagine = mysql_real_escape_string($_GET['immagine']);
    echo $immagine;

    @$prezzo = mysql_real_escape_string($_GET['prezzo']);
    echo $prezzo;




    $were = " WHERE ";
    if ($marca != "") {
    $were.=" marca= '$marca' AND ";
    }
    if ($anno != "") {
    $were.=" anno= '$anno' AND ";
    }
    if ($immagine != "") {
    $were.=" immagine= '$immagine' AND ";
    }
    if ($prezzo != "") {
    $were.=" prezzo= '$prezzo' AND ";
    }
    $were.=" 1=1 ";


    $query = "SELECT * FROM prova $were";



    $rs = mysql_query($query) or die(mysql_error());
    $num = mysql_num_rows($rs);


    if ($num == 0)
    echo "<div style=\"text-align:center\">Nessun contatto presente</div>";
    else {
    if (empty($_GET['ordercampo']))
    $_GET['ordercampo'] = "marca";

    if (empty($_GET['order']))
    $_GET['order'] = "desc";

    if ($_GET['order'] == "asc") {
    $ordinaVerso = "desc";
    }
    if ($_GET['order'] == "desc") {
    $ordinaVerso = "asc";
    }
    $query = "SELECT * FROM prova $were order by $_GET[ordercampo] $ordinaVerso ";
    $rs = mysql_query($query) or die(mysql_error());
    ?>



    <table id="tabella_moto" border="1">
    <tr>
    <td align="center">Marca</td>
    <td align="center">Anno</td>
    <td align="center">Immagine</td>
    <td align="center">Prezzo</td>
    </tr>
    <?php
    $query = "SELECT * FROM prova $were order by $_GET[ordercampo] $ordinaVerso LIMIT " . $inizio . ", " . $fine;
    $rs = mysql_query($query) or die(mysql_error());
    while ($results = mysql_fetch_array($rs)) {
    $query = "SELECT * FROM prova $were order by $_GET[ordercampo] $ordinaVerso LIMIT " . $inizio . ", " . $fine;
    echo "<tr>";
    echo "<td width=\"25%\">$results[marca]</td>";
    echo "<td width=\"25%\">$results[anno]</td>";
    echo "<td width=\"25%\">$results[immagine]</td>";
    echo "<td width=\"25%\">$results[prezzo]</td>";
    echo "</tr>";

    $ordercampo = mysql_real_escape_string($_GET['ordercampo']);

    $order = mysql_real_escape_string($_GET['order']);
    } //fine ciclo while
    } //fine else nel caso ci sia almeno un contatto nel comune
    ?>
    </table>

    <?php
    // Trovo il numero di tutti i record presenti nella tabella
    $query = mysql_query("SELECT * FROM prova $were", $conn);
    $quanti = mysql_num_rows($query);

    $intero = $quanti / $fine; //Calcolo il numero di pagine totali
    $intero = ceil($intero);
    ?>






    Pagina <?php echo $pag; ?> di <?php echo $intero; ?></p>







    <?php
    //Effettuo un for che mi scrive tutti i link alle relative pagine
    for ($x = 1; $x < $intero + 1; $x++) {
    if ($x == $pag) {
    ?>

    <?php echo $x; ?> |

    <?php
    } else {
    ?>
    <body bgcolor="yellow">
    <?php echo $x; ?> |

    <?php
    }
    }
    ?>

    </p>

    <?php
    mysql_close($conn); //chiudo la connessione
    ?>


    Non sono un programmatore (ed essendo nuovo del forum non so neanche se questa è la sezione giusta dove postare) ma mi sono cimentato per la prima volta nella realizzazione di questo script..l'ho testato e funziona ma non so se è sicuro..

    aspetto una vostra risposta,

    Saluti.
    Realizzazione siti internet e posizionamento nei motori di ricerca.

    web-siena.it

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    non è che sia poi un granchè.
    Non esiste un metodo sicuro al 100%, bisogna lavorare diciamo così euristicamente.

    Intanto questa
    // Trovo il numero di tutti i record presenti nella tabella
    $query = mysql_query("SELECT * FROM prova $were", $conn);
    $quanti = mysql_num_rows($query);
    la cambierei in un ben più semplice select count(*) invece di far tornare tutte le righe al lento server php
    -------
    per il resto, in generale, un metodo abbastanza sicuro (se hai la certezza che non ci siano ; nei tuoi parametri) è quello di brutalmente cercare il primo ; e segare via tutto il resto della query a partire da lì.
    così impedisci l'uso di comandi "accodati"
    -------
    riguardo invece a confronti "aggiunti" nelle clausule where, dipende dalla semantica di quelle che passi
    tanto per dire perchè non metti le parentesi, e taglia via l' 1=1 nella query (gestisci esplicitamente i due casi, con e senza WHERE)

  3. #3
    Grazie mille franzauker per la risposta celere.

    Proprio perchè è il mio primo script vorrei imparare dalle persone che sanno programmare.

    Provvedo ad applicare subito le modifiche..non appena sarà pronto postero di nuovo il codice.


    grazie ancora a tutti
    Realizzazione siti internet e posizionamento nei motori di ricerca.

    web-siena.it

  4. #4
    A prescindere dalla sicurezza delle query ti consiglio di dare un occhiata a questa pillola che ti potra aiutare con la paginazione pillola (dovrai comunque aumentarne la sicurezza)

  5. #5
    Salve di nuovo..ho cambiato un po i piani..ho pensato di creare una ricerca con delle selectbox dipendenti fra loro:nella prima scelgo una opzione..nella seconda potrò scegliere le opzioni inerenti la select precedente..e così via..lo script funziona..pero ho un problema..se una volta inseriti i valori nelle tre select e vado a cambiare il valore della prima, mi rimangono in memoria i valori delle select successive..come posso resettare tali valori?..per passare dinamicamente i valori uso onchange.document.form1.submit()..devo apportare modifiche in questo punto??

    vi posto il codice modificato:

    P.S.:appena avrò realizzato uno script decente inizierò con la pillola suggeritami e con le indicazioni per migliorarne la sicurezza.

    PRIMA PARTE

    <?php
    $conn = mysql_connect("127.0.0.1", "root", "") or die($errConnessione);
    mysql_select_db("gazza_moto") or die($errSelezione);



    // Controllo se esite gia il numero di pagina, altrimenti lo setto a 1
    @$pag = mysql_real_escape_string($_GET["pag"]);
    if (isset($pag) == false || is_numeric($pag) == false || $pag < 1) {
    $pag = 1;
    }

    // Genero le variabili che stanno a rappresentare quali record da estrarre dal DB
    $fine = 2;
    $inizio = ($pag - 1) * $fine;
    ?>

    <form name="form1" method="get" action="prova.php">
    <div align="center">
    <table width="51%" border="2">
    <tr>
    <td width="52%">Marca</td>
    <td width="48%">



    <?php
    if (empty($_GET['marca'])) {

    $query = "SELECT DISTINCT marca FROM prova";
    $rs = mysql_query($query) or die(mysql_error());
    $num = mysql_num_rows($rs);



    echo "<select name=\"marca\" onchange=\"document.form1.submit()\" >";
    echo"<option value=\"\">---Seleziona una opzione---</option>";
    for ($i = 0; $i < $num; $i++) {
    while ($results = mysql_fetch_array($rs)) {


    echo "<option value=\"$results[marca]\" >$results[marca]</option>";
    }
    }
    echo"</select>";
    } else {



    $query = "SELECT DISTINCT marca FROM prova";
    $rs = mysql_query($query) or die(mysql_error());
    $num = mysql_num_rows($rs);


    echo "<select name=\"marca\" onchange=\"document.form1.submit()\" >";
    echo"<option value=\"\">---Seleziona una opzione---</option>";
    for ($i = 0; $i < $num; $i++) {
    while ($results = mysql_fetch_array($rs)) {



    echo "<option ";
    if ($results[$i] == $_GET['marca']) {

    echo "selected=\"selected\"";
    }

    echo"value=\"$results[marca]\">$results[marca]</option>";
    }
    }
    echo"</select>";
    }
    ?>


    </td>
    </tr>
    <tr>
    <td width="52%">Anno</td>
    <td width="48%">

    <?php
    if (empty($_GET['anno'])) {

    @$marca = mysql_real_escape_string($_GET['marca']);

    $query = "SELECT * FROM prova WHERE marca='$marca'";
    $rs = mysql_query($query) or die(mysql_error());
    $num = mysql_num_rows($rs);





    echo "<select name=\"anno\" onchange=\"document.form1.submit()\">";

    echo"<option value=\"\">---Seleziona una opzione---</option>";
    for ($i = 0; $i < $num; $i++) {
    while ($results = mysql_fetch_array($rs)) {


    echo "<option value=\"$results[anno]\">$results[anno]</option>";
    }
    }
    echo"</select>";
    } else {



    @$marca = mysql_real_escape_string($_GET['marca']);

    $query = "SELECT * FROM prova WHERE marca='$marca'";
    $rs = mysql_query($query) or die(mysql_error());
    $num = mysql_num_rows($rs);





    echo "<select name=\"anno\" onchange=\"document.forms1.submit()\">";

    echo"<option value=\"\">---Seleziona una opzione---</option>";
    for ($i = 0; $i < $num; $i++) {
    while ($results = mysql_fetch_array($rs)) {


    if ($results[anno] == $_GET['anno']) {

    echo "<option selected=\"selected\" value=\"$results[anno]\" >$results[anno]</option>";
    }

    echo "<option value=\"$results[anno]\" >$results[anno]</option>";
    }
    }
    echo"</select>";
    }
    ?>

    </td>
    </tr>



    <tr>
    <td width="52%">Prezzo</td>
    <td width="48%">
    <?php
    if (empty($_GET['prezzo'])) {
    @$anno = mysql_real_escape_string($_GET['anno']);
    $query = "SELECT * FROM prova WHERE anno='$anno'";
    $rs = mysql_query($query) or die(mysql_error());
    $num = mysql_num_rows($rs);
    echo "<select name=\"prezzo\" onchange=\"document.form1.submit()\">";
    echo"<option value=\"\">---Seleziona una opzione---</option>";
    for ($i = 0; $i < $num; $i++) {
    while ($results = mysql_fetch_array($rs)) {


    echo "<option value=\"$results[prezzo]\">$results[prezzo]</option>";
    }
    }

    echo"</select>";
    } else {


    @$anno = mysql_real_escape_string($_GET['anno']);
    $query = "SELECT * FROM prova WHERE anno='$anno'";
    $rs = mysql_query($query) or die(mysql_error());
    $num = mysql_num_rows($rs);
    echo "<select name=\"prezzo\" onchange=\"document.form1.submit()\">";
    echo"<option value=\"\">---Seleziona una opzione---</option>";
    for ($i = 0; $i < $num; $i++) {
    while ($results = mysql_fetch_array($rs)) {

    if ($results[prezzo] == $_GET['prezzo']) {

    echo "<option selected=\"selected\" value=\"$results[prezzo]\" >$results[prezzo]</option>";
    }

    echo "<option value=\"$results[prezzo]\">$results[prezzo]</option>";
    }
    }

    echo"</select>";
    }
    ?>

    </td>
    </tr>



    <tr>
    <td colspan="4"><div align="center">

    &prezzo=<?php echo "" ?>&anno=<?php echo "" ?>&marca=<?php echo "" ?>&ordercampo=<?php echo "prezzo" ?>&order=<?php echo "desc" ?>">Reset


    <!--
    <input type="submit" name="Submit" value="Azzera paramentri di ricerca">
    -->

    </div></td>
    </tr>
    </table>


    </p></div>
    </form>
    Realizzazione siti internet e posizionamento nei motori di ricerca.

    web-siena.it

  6. #6
    Ecco la SECONDA PARTE



    <?php
    @$marca = mysql_real_escape_string($_GET['marca']);


    @$anno = mysql_real_escape_string($_GET['anno']);


    @$immagine = mysql_real_escape_string($_GET['immagine']);


    @$prezzo = mysql_real_escape_string($_GET['prezzo']);

    $were = " WHERE ";
    if ($marca != "") {
    $were.=" marca= '$marca' AND ";
    }
    if ($anno != "") {
    $were.=" anno= '$anno' AND ";
    }
    if ($immagine != "") {
    $were.=" immagine= '$immagine' AND ";
    }
    if ($prezzo != "") {
    $were.=" prezzo= '$prezzo' AND ";
    }
    $were.=" 1=1 ";


    $query = "SELECT * FROM prova $were";



    $rs = mysql_query($query) or die(mysql_error());
    $num = mysql_num_rows($rs);


    if ($num == 0)
    echo "<div style=\"text-align:center\">Nessun contatto presente</div>";
    else {
    if (empty($_GET['ordercampo']))
    $_GET['ordercampo'] = "prezzo";

    if (empty($_GET['order']))
    $_GET['order'] = "desc";

    if ($_GET['order'] == "asc") {
    $ordinaVerso = "desc";
    }
    if ($_GET['order'] == "desc") {
    $ordinaVerso = "asc";
    }
    $query = "SELECT * FROM prova $were order by $_GET[ordercampo] $ordinaVerso ";
    $rs = mysql_query($query) or die(mysql_error());
    ?>



    <table id="tabella_moto" border="1">
    <tr>
    <td align="center">Marca</td>
    <td align="center">Anno</td>
    <td align="center">Immagine</td>
    <td align="center">Prezzo</td>
    </tr>
    <?php
    $query = "SELECT * FROM prova $were order by $_GET[ordercampo] $ordinaVerso LIMIT " . $inizio . ", " . $fine;
    $rs = mysql_query($query) or die(mysql_error());
    while ($results = mysql_fetch_array($rs)) {
    $query = "SELECT * FROM prova $were order by $_GET[ordercampo] $ordinaVerso LIMIT " . $inizio . ", " . $fine;
    echo "<tr>";
    echo "<td width=\"25%\">$results[marca]</td>";
    echo "<td width=\"25%\">$results[anno]</td>";
    echo "<td width=\"25%\">$results[immagine]</td>";
    echo "<td width=\"25%\">$results[prezzo]</td>";
    echo "</tr>";

    $ordercampo = mysql_real_escape_string($_GET['ordercampo']);

    $order = mysql_real_escape_string($_GET['order']);
    } //fine ciclo while
    } //fine else nel caso ci sia almeno un contatto nel comune
    ?>
    </table>

    <?php
    // Trovo il numero di tutti i record presenti nella tabella
    $query = mysql_query("SELECT * FROM prova $were", $conn);
    $quanti = mysql_num_rows($query);

    $intero = $quanti / $fine; //Calcolo il numero di pagine totali
    $intero = ceil($intero);
    ?>






    Pagina <?php echo $pag; ?> di <?php echo $intero; ?></p>





    <?php
    //Effettuo un for che mi scrive tutti i link alle relative pagine
    for ($x = 1; $x < $intero + 1; $x++) {
    if ($x == $pag) {
    ?>

    <?php echo $x; ?> |

    <?php
    } else {
    ?>
    <body bgcolor="yellow">
    <?php echo $x; ?> |

    <?php
    }
    }
    ?>

    <?php
    mysql_close($conn); //chiudo la connessione
    ?>
    Realizzazione siti internet e posizionamento nei motori di ricerca.

    web-siena.it

  7. #7
    Originariamente inviato da kappaekappa
    A prescindere dalla sicurezza delle query ti consiglio di dare un occhiata a questa pillola che ti potra aiutare con la paginazione pillola (dovrai comunque aumentarne la sicurezza)


    Grazie mille KappaeKappa..mi sono messo a studiare la pillola..appena mi sono chiarito le idee te lo faccio sapere..

    ancora grazie per la celere risposta.
    Realizzazione siti internet e posizionamento nei motori di ricerca.

    web-siena.it

  8. #8
    Aggiornamenti..

    quello che vorrei realizzare è tipo quello che c'è nel sito di MediaWord \ computer \ notebook ..per la ricerca si utilizzano delle combobox dipendenti..


    Ricapitolando:

    Ho 3 select consecutive, dipendenti fra loro (la 2° dipende dalla 1°, la 3° dipende dalla 2°, etc..).

    Io inoltro il conenuto della select a quella successiva così

    echo "<select name=\"marca\" onchange=\"document.form1.submit()\" >";

    Pero il problema che ho riscontrato è il seguente: se inserisco tutte le opzioni nelle select e poi cambio il valore della 1°, mi rimangono in memoria nell'URL i dati della select precedenti e il ssitema non funziona più.

    Pensavo di risolvere il problema controllando se è gia piena la variabile della prima select con
    if (empty($_GET['marca'])) {
    ...codice...
    }

    altrimenti

    else{

    QUI CREDO CHE DOVREMMO INTERVENIRE!!!

    }


    Pensavo di modificare il contenuto di onchange, in maniera da RESETTARE il valore della select
    precedente e poi inviare il nuovo valore.


    Non so se sono stato chiaro..spero che mi diate una mano perchè sono un pò in confusione.

    P.S.: spero di aver postato nella sezione giusta.


    Un saluto e un ringraziamento anticipato a tutti.
    Realizzazione siti internet e posizionamento nei motori di ricerca.

    web-siena.it

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 © 2026 vBulletin Solutions, Inc. All rights reserved.