• User Attivo

    AIUTO: come proteggersi da sql innection?

    Salve ragazzi, ho un aiuto disperato , chi mi puo aiutare per capitre come devo fare per proteggermi da questa cosa, pensavo che fare cosi:

    
    
    $msp=htmlentities($_POST['msp']);
    <input type="text" name="msp" size="40">
    
    
    
    

    Per favore, mi potete aiutare?


  • ModSenior

    Ciao angelo85ct,

    puoi usare la funzione mysql_real_escape_string.


  • User Attivo

    Mi basta usare questa per ogni campo input?
    In questo modo dovrei risolvere?


  • ModSenior

    Si è sufficiente usarlo per i valori che passerai poi alla query.


  • User Attivo

    Secondo te, il fatto che utilizz i GET invece dei POST potrebbe essere un suggerimento a chi volesse effettuare operazione di SQL Injection?
    Cioè il fatto che vedano i nomi delle variabili passate può sevirgli da aiuto?


  • ModSenior

    Chi è capace di sfruttarla è capace di farla indifferentemente se è GET o POST, in fondo non vi è alcuna difficoltà in un operazione simile.


  • User Attivo

    Ciao, ti volevo chiedere un consiglio, se ho un campo input cosi:

    [PHP]<input type="text" name="msp" size="40">[/PHP]

    e faccio le seguente funzione in php:

    [PHP]
    function Formatta($campo) {
    $campo=htmlentities($campo);
    $campo=mysql_real_escape_string($campo);

    $campo=ereg_replace(";"," ",$campo);
    $campo=ereg_replace("--"," ",$campo);
    $campo=ereg_replace("+","piu",$campo);
    $campo=ereg_replace("'"," ",$campo);
    $campo=ereg_replace("("," ",$campo);
    $campo=ereg_replace(")"," ",$campo);
    $campo=ereg_replace("="," ",$campo);
    $campo=ereg_replace("<"," ",$campo);
    $campo=ereg_replace(">"," ",$campo);
    $campo=ereg_replace("@"," ",$campo);

    $campo=ereg_replace("select"," ",$campo);
    $campo=ereg_replace("insert"," ",$campo);
    $campo=ereg_replace("create"," ",$campo);
    $campo=ereg_replace("delete"," ",$campo);
    $campo=ereg_replace("from"," ",$campo);
    $campo=ereg_replace("where"," ",$campo);
    $campo=ereg_replace("or"," ",$campo);
    $campo=ereg_replace("and"," ",$campo);
    $campo=ereg_replace("like"," ",$campo);
    $campo=ereg_replace("exec"," ",$campo);

    $campo=ereg_replace("sp_"," ",$campo);
    $campo=ereg_replace("xp_"," ",$campo);
    $campo=ereg_replace("sql"," ",$campo);
    $campo=ereg_replace("rowset"," ",$campo);
    $campo=ereg_replace("oper"," ",$campo);
    $campo=ereg_replace("begin"," ",$campo);
    $campo=ereg_replace("end"," ",$campo);
    $campo=ereg_replace("declare"," ",$campo);
    $campo=ereg_replace("update"," ",$campo);
    $campo=ereg_replace("*","per",$campo);
    }

    [/PHP]

    [PHP]Formatta($msp);[/PHP]

    questa potrebbe andare bene come soluzione?


  • ModSenior

    È sufficiente utilizzare mysql_real_escape_string, fare tutte quelle operazioni è inutile.


  • User Attivo

    Altra cosa, molti siti usano questo: dotdefender Blocked Your Request.
    Mi sapete dire cosa è?


  • User Attivo

    @Thedarkita said:

    È sufficiente utilizzare mysql_real_escape_string, fare tutte quelle operazioni è inutile.

    Ciao, io questa soluzione l'ho provata, pero' mi sono accorto che nel caso in cui un utente invii un mess e ci sonio degli apici e dei br, il messaggio che arriva è un po incomprensibile.

    Lo stesso problema ce l'ho se nell'url passo una parola tipo
    sant'alfio, nel db è memorizzata cosi, ma se faccio mysql_real_escape_string mi mette \ e poi non mi cerca nel db, secondo te dovrei memorizzare le parole nel db con '?

    Ciao e grazie


  • ModSenior

    Allora la funzione va utilizzata correttamente, esempio:
    [php]
    $a = $_POST['variabile']; // Input

    $query("INSERT INTO tabella(campo) VALUES('".mysql_real_escape_string($a)."')");
    [/php]Per quanto riguara il codice html, puoi o convertirlo nelle rispettive entità html tramite la funzione htmlentities e averlo cosi come testo, o rimuoverlo con la funzione strip_tags.


  • User Attivo

    Un'ultima cosa, se io la connection la metto nell'index, e non la chiudo mai, la connessione sta sempre aperta, qualsiasi pagina del sito visualizzo, facendo cosi, è possibile che tramite un form per l'invio di email, se non ho alcun controllo , per levare parole strane, possano accedere al db, conoscendo nome delle tabelle, e nome database?

    Te lo chiedo, perche' uso il php da auto didatta, e mi ero fatto un piccolo sito tanto per imparare, ma mi hanno cancellato tutte le tabelle.


  • ModSenior

    La connessione viene chiusa automatica al termine dell'eseuzione dello script, il form di invio email non credo utilizzi il database.
    Lanciare una query di drop in questa maniera mi sembra comunque piuttosto difficile, probabilmente il problema è altrove.


  • User Attivo

    Allora sarà stato da qualche get dell'url.

    Altra cosa, ho messo online una demo del mio pannello:
    provademopannell . altervista. org/ index .php

    Tu ne capisci di sql innection? Riesci ad entrare nel mio pannello?