Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    32

    PreparedStatement e sql injector

    Salve ragazzi, sto facendo un piccolo progetto in java all'università (pemetto che mi sono avvicinato da poco a questo linguaggio).
    il mio problema è che dovrei fare un "minimo" controllo sugli input per cercare di evitare l'sql injector, leggendo in rete ho capito che dovrei utilizzare i PreparedStatement
    codice:
    query="select * from persona where nome like ? ";
    st=con.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    st.setString(1,"%"+nome+"%");
    rs = st.executeQuery();
    con questo approccio dovrei risolvere il problema giusto? (anche se non ho ben capito il perchè )

    Un'altra cosa, siccome questo codice dovrei inserirlo in un metodo ActionPerformed di un pulsante, mi dà errore in quanto non riconosce PreparedStatement... come posso risolvere?


    GRAZIE

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    32
    Siccome per la seconda sono riuscito più o meno a metterci una pezza.

    Qualcuno sarebbe così gentile da spiegarmi semplicemente perchè usando i prepared statement si è immuni da sql injection, rispetto agli statement, non ho capito il senso tecnico che c è dietro.

    GRAZIE

  3. #3
    Usando i prepared statement le query vengono generate internamente, quando gli passi i parametri con i vari set... si riesce a distinguere i parametri che inserisci per la query dai comandi sql che scrivi quando crei l'oggetto prepared statement.

    In questo modo i parametri della query possono essere ripuliti da tutto ciò che altererebbe il risultato della query(le injection appunto).
    Coltiva Linux, Windows si pianta da solo!

  4. #4
    caso dello statement ho una Stringa con la query nel tuo esempio devo poi concatenare la variabile da eguagliare.
    Esempio ho un form dove scrivo il nome che viene poi appeso alla query , se io nel nome scrivo il nome ed altre istruzioni sql lui le eseguirà esempio nome="pippo' and cognome like 'pluto" queste sono le sql injection e così non le puoi evitare.
    codice:
    query="select * from persona where nome like '" + nome + "'";
    Con i PreparedStatement visto che fai tu i setString setInt e lui che si preoccupa di mettere o non mettere gli apici quindi eviti le injection.

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