Visualizzazione risultati 1 fino 16 di 16

Discussione: Sanitize database input

  1. #1
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito Sanitize database input

    Ragazzi qualcuno ha modo di spiegarmi questo problema ? leggevo che è importante per difendere i dati del database del proprio sito, ma non riesco a capire le guide in inglese sul cosa fare.

  2. #2
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,167

    Predefinito

    Qui è spiegato in italiano: https://it.wikipedia.org/wiki/SQL_injection

    In generale, sicuramente eviti il problema usando i Prepared Statements.
    Altrimenti qualsiasi dato prelevato da esterno devi farlo "passare" per la escape_string()

    Ciao!

  3. #3
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    Quindi ho programmato male tutte le sql, andando a fare un confronto con quel codice rispetto al mio :

    Codice PHP:
    $infoAutore=array(
    'id' => $logutenti['idUtente'],
    'nome' => $logutenti['utente'],
    'icoView' => $logutenti['icoView']
    );


    $rowUpdate="UPDATE t_utenti SET
    prigioni='"
    .$infoAutore['id']."',
    prigioniMotivo='"
    .$arresto['motivo']."',
    prigioniData=NOW()
    WHERE idUtente='"
    .$arresto['idUtente']."' ";
    Ultima modifica di exlot : 22-01-2018 alle ore 20.33.50

  4. #4
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,167

    Predefinito

    Dipende come prelevi i dati $logutenti, $infoautore e $arresto. Se prima fai il controllo tramite escape, non c'è problema.

    Ciao!

  5. #5
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    Codice PHP:
    $arresto=array(
    'idUtente' => $_POST['id'],
    'gogna' => $_POST['gogna'],
    'motivo' => $_POST['motivo'],
    );
    tipo questo ? come dovrei correggerlo ? non riesco a capire

  6. #6
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,167

    Predefinito

    Esatto, quello non va bene. Quali funzioni utilizzi per l'interazione con il database?
    Dovresti prima effettuare l'escape dei vari dati.

    Ciao!

  7. #7
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    Codice PHP:
    mysql_connect($server,$serverUser,$serverPsw) or die (mysql_error());
    mysql_select_db($database) or die (mysql_error());
    sono vecchio stile, vero ?

  8. #8
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,167

    Predefinito

    Molto vecchio, direi troppo perché quelle funzioni sono ormai obsolete. Dovresti passare a mysqli o PDO.

    Nel frattempo, ogni volta che prelevi un dato da $_POST o comunque da utente, fai una cosa del genere:

    Codice PHP:
    $arresto=array(
    'idUtente' => mysql_escape_string($_POST['id']),
    'gogna' => mysql_escape_string($_POST['gogna']),
    'motivo' => mysql_escape_string($_POST['motivo']),
    );
    Ciao!

  9. #9
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    ok, aggiorno subito tutti i post. Che mi consigli di usare per fare la connessione al db ?

  10. #10
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,167

    Predefinito

    Per ora hai utilizzato quelle vecchie funzioni, devi lasciare quello.

    Però dovresti riscrivere il tutto con mysqli o PDO.

    La versione procedurale di mysqli è molto simile alle vecchie funzioni che hai utilizzato, vedi l'esempio #2 di questa pagina, ti risulterà familiare.

    Ciao!

  11. #11
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    ho imparato la lezione ovviamente, ma sto cercando di capire quale filtro sanitizza il testo senza rovinare tutti i caratteri. Qualcuno sa dirmi quale filtro va usato per non rovinare ' " < > e tutti i caratteri particolari?

    FILTER_SANITIZE_STRING ho provato lui ma rovina < > " '

  12. #12
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Se il problema è ancora quello di cui parlavi all'inizio della discussione, la soluzione pure è sempre la stessa: i prepared statements.

    Se, invece, nel frattempo è cambiato qualcosa e ora stai lavorando con i filtri per altri motivi, puoi fare riferimenti alla documentazione sui sanitize filters.
    Ultima modifica di mzanella : 18-12-2018 alle ore 20.51.23 Motivo: Corretto uno dei link

    I suggerimenti che do più spesso:


  13. #13
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    a parte che il link è uguale. no no, il problema è che dopo aver sanitizzato tutto, non riesco ad individuare il tipo di filtro adatto a TESTO GENERICO...

  14. #14
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Ho corretto il primo link

    Non c'è un filtro specifico per un testo generico, proprio perché è generico. In generale dovresti lasciare il testo così com'è e lasciare il compito di prevenire le SQL Injection ai prepared statements.
    A meno che tu non abbia, per altri motivi, delle richieste specifiche su cosa rimuovere/modificare, in quel caso si può cercare il filtro più adatto.

    I suggerimenti che do più spesso:


  15. #15
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    è una programmazione in OGGETTI esatto? io sto programmando nell'altro metodo... Potresti fare un esempio di una semplice insert sanitizzata bene? o.o

  16. #16
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    No, non è una funzionalità esclusiva della programmazione ad oggetti.

    Di esempi ce ne sono anche nella documentazione ufficiale, eccone comunque uno:
    Codice PHP:
    $link = mysqli_connect("localhost", "USER", "PASSWORD", "DATABASE");
    if (
    mysqli_connect_errno()) {
    die(
    mysqli_connect_error());
    }

    $stmt = mysqli_prepare($link, "INSERT INTO tabella(colonna1, colonna2) VALUES(?, ?)");
    if (!
    $stmt) {
    die(
    "Preparazione statement fallita");
    }

    $valore1 = "stringa qualunque";
    $valore2 = 5;

    mysqli_bind_param($stmt, "si" $valore1, $valore2);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
    mysqli_close($link);

    I suggerimenti che do più spesso:


Regole di scrittura

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