Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: [JAVA] Escape per db

  1. #1
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940

    [JAVA] Escape per db

    Volendo fare un'interrogazione SQL qualsiasi, tipo la seguente (in cui utilizzo Hibernate, ma è indifferente la cosa):

    codice:
    ...
    List<Utente> result = null;
    
    try
        {
        tx = session.beginTransaction();
        result = session.createQuery("FROM Utente WHERE nome='"+MIA_VAR+"'").list();
        tx.commit();
        }
     
    catch (HibernateException he)
        {
        ...     
        }
     
    for(Utente u:result) System.out.println(u.getNome()+" "+u.getPassword());
    ...
    Esiste un qualcosa Java (o Hibernate) built-in che faccia l'escape della query (per il db in uso), al fine di evitare errori o tentativi di SQL injections? (Ciò che avviene se è l'utente a valorizzare MIA_VAR)

    Ad esempio, per PHP c'è la funzione mysql_real_escape_string().

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    jdbc e hibernate sono tecnologie diverse
    con i jdbc ci sono i PreparedStatement
    con hibernate devi usare i Criteria http://www.hibernate.org/hib_docs/v3...rying-criteria

  3. #3
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Perdonami, è solo un mese che uso Java, ma non mi pare che - per quanto riguarda Hibernate - ciò che mi hai linkato sia quello che ho chiesto.
    O proprio non l'ho intuito...

    Intendevo:
    http://php.html.it/guide/lezione/2986/sql-injections/
    http://php.html.it/guide/lezione/298...sql-injection/

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    come no?
    se costruisci la where condition con i Criteria non hai problemi di apici
    la sql injection si fonda sullo scarso controllo degli apici

  5. #5
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Beh, direi proprio che non è solo questo (!!)..

    Infatti PHP mette a disposizione la funzione mysql_real_escape_string() e non solamente un str_replace() proprio perchè non siamo noi a dover fare l'escape manuale delle stringhe in ingresso al db, ma qualcuno che in merito ha esperienza.

    Nel passato sono stati exploitati SQL injections con decine di caratteri o combinazioni di essi, non solo con gli apici.

    PHP originariamente prevedeva la direttiva (da file di config) che faceva un mero escape degli apici e qualcos'altro.
    L'hanno crackata tante di quelle volte che la pratica è diventata deprecata...

    La mia domanda resta aperta.



  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    Originariamente inviato da mark2x
    Nel passato sono stati exploitati SQL injections con decine di caratteri o combinazioni di essi, non solo con gli apici.
    puoi farmi un esempio?

  7. #7
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    I caratteri possibilmente dannosi sono i seguenti:

    codice:
    ' or "	    character String Indicators
    -- or #   single-line comment
    /*…*/  	 multiple-line comment
    +	    addition, concatenate (or space in url)
    ||	    (double pipe) concatenate
    %	   wildcard attribute indicator
    ?Param1=foo&Param2=bar    URL Parameters
    PRINT 	  useful as non transactional command
    @variable	  local variable
    @@variable	global variable
    waitfor delay '0:0:10'	  time delay
    (alcuni caratteri sono pericolosi solo se preceduti da altri, specie in ogni modo l'apice).

    Per gli esempi (se si trovano whitepaper che vadano al di là del semplice apice.. come del resto il mio su html.it... :master: ....) cerca "advanced sql injections" su google, su siti tipo owasp oppure (molto meglio) sui forum dei cracker o sui security fix del tuo linguaggio preferito (per me PHP).

    Non solo, sono stati effettuati exploit che dipendevano dal charset in uso (non mi chiedere come, non riesco nemmeno ad immaginarlo). Se sei giustamente curioso, googla.

    La stessa funzione PHP recita:

    mysql_real_escape_string -- Aggiunge le sequenze di escape ai caratteri speciali in una stringa per l'uso in una istruzione SQL, tenendo conto dell'attuale set di caratteri della connessione.
    P.S.: sono conscio che non ho risposto con link precisi, ma da una ricerca che ho fatto adesso per risponderti ho solo trovato sql injections da wannabe... tempo fa avevo un ottimo whitepaper sugli exploit su MS SQL, ma l'ho cancellato.
    Se l'argomento ti interessa, magari se lo trovi...

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Con tutto il rispetto per PHP che adopero quotidianamente, JAVA è millemila miliardi di anni luce avanti e ti bastava leggere la documentazione di jdbc per sapere che i PreparedStatement sono tutti escapati di default. ti rimando ad un articolo più esaustivo

    http://www.owasp.org/index.php/Preve...ection_in_Java
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Originariamente inviato da Andrea1979
    Con tutto il rispetto per PHP che adopero quotidianamente, JAVA è millemila miliardi di anni luce avanti e ti bastava leggere la documentazione di jdbc per sapere che i PreparedStatement sono tutti escapati di default. ti rimando ad un articolo più esaustivo

    http://www.owasp.org/index.php/Preve...ection_in_Java
    Infatti non l'ho letto perchè sono solo agli inizi di Java...
    Vale quindi anche per Hibernate che su JDBC si appoggia?

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Proprio nell'articolo citato c'è un link: Hibernate pare che usi PreparedStatement (Hibernate non l'ho mai usato e non ho mai approfondito). Dovresti essere tranquillo.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.