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

Discussione: sql injection

  1. #1

    sql injection

    cos'è la sql injection?
    stasera, quando torno da scuola, se attacco internet, vi posto il codice.

  2. #2
    Utente bannato
    Registrato dal
    Aug 2001
    Messaggi
    696
    c'è un articolo su freephp.html.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    185
    : - )


    L'SQL Injection è una tecnica di exploiting della applicazione web, che sfrutta
    i dati inviati da un client ad un Database SQL ( DS ), senza controlli sui
    caratteri potenzialmente dannosi.
    Infatti una moltitudine di applicazioni web, utilizzano delle particolari variabili,
    che possono essere impostate da un utente per comunicare con il server; purtroppo
    un utente malintenzionato, può impostare tali variabili in modo da eseguire codice
    arbitrario sulla macchina remota o per accedere ad un'area protetta da password,
    per esempio.

    Molte applicazioni web, sfruttano il parametro SELECT; tale comando è utilizzato per
    prendere i dati da una query, per poi compararli con quelli contenuti nella lista di
    un database.
    Ad esempio, il codice seguente, appartiene ad uno script di login, che prende lo
    username e la password da una query e li confronta con quelli contenuti in una lista
    ( lo script preso in considerazione è fornito da freephp.html.it ) :

    $login = $_GET["nlogin"];
    $password = $_GET["ppass"];
    $string = mysql_query("SELECT * FROM ulist WHERE login='".$login."' AND
    password='".$password."'");
    if (mysql_num_rows($string) == 0)
    $in = 0;
    else
    $in = 1;

    Questo è un classico esempio di script, vulnerabile a caratteri potenzialmente
    pericolosi, dato che sono assenti controlli su di esse; quindi, per superare il
    controllo dello script, possiamo inserire nei campi dello username ( $login ) e
    della password ( $password ), il codice " OR "=" :

    $string = mysql_query("SELECT * FROM ulist WHERE login=" OR "=" AND
    password=" OR "="");

    Come è possibile vedere, queste due condizioni sono sempre vere, quindi lo script
    restituirà necessariamente un valore uguale ad 1 ( $in = 1 ).

  4. #4

    $login = $_GET["nlogin"];
    $password = $_GET["ppass"];
    $string = mysql_query("SELECT * FROM ulist WHERE login='".$login."' AND
    password='".$password."'");
    if (mysql_num_rows($string) == 0)
    $in = 0;
    else
    $in = 1;

    Questo è un classico esempio di script, vulnerabile a caratteri potenzialmente
    pericolosi, dato che sono assenti controlli su di esse; quindi, per superare il
    controllo dello script, possiamo inserire nei campi dello username ( $login ) e
    della password ( $password ), il codice " OR "=" :

    $string = mysql_query("SELECT * FROM ulist WHERE login=" OR "=" AND
    password=" OR "="");

    Come è possibile vedere, queste due condizioni sono sempre vere, quindi lo script
    restituirà necessariamente un valore uguale ad 1 ( $in = 1 ).
    ma il problema non si risolve facendo così:

    $string = mysql_query("SELECT * FROM ulist WHERE login='".$login."' AND
    password='".$password."'");

    if(mysql_num_rows($string)==1)
    {.... qui inserisco il codice di accettazione login}


    nel tuo caso da uno perchè in realtà non da 0 quindi se tu al posto di verificare lo 0 verifichi l'1 il problema dovrebbe essere risolto o sbaglio? Anche senza fare controlli??
    Ho ripreso questo script perchè ho letto i 3d sull'argomento e alla fine senza fare vari controlli mi sembra che la mia soluzione sia corretta, voi cosa dite? anche se si inserisce il codice " OR "=" i risultato sarà superiore a 1 e quindi non da l'accesso in ogni caso!! ovviamente si si ha un solo utente la cosa non funziona.

    aspetto commenti.
    ciao

  5. #5
    Utente di HTML.it L'avatar di aserena
    Registrato dal
    Feb 2003
    Messaggi
    310
    Sbagliatissimo!!!! Se nel campo pwd inserisco codice del tipo
    ' or 1=1

    restituirà com una riga....

    http://freephp.html.it/articoli/view...olo.asp?id=123

    Leggi questo articolo, è abb esauriente.

    ciao ciao
    La (!) è quella roba che in autunno si intristisce... perche': seccano i piselli, migrano gli uccelli, cadono i marroni, e se poi c'è anche la nebbia non si vede più un caXXo!! by Piero.mac @07/05

  6. #6
    scusa io ho appena provato su uno script che ho fatto al momento e non mi fa entrare.!! quella pillola l'ho già letta e infatti curioso sono andato a provare??
    Il punto è che non accedo inserendo nemmeno pippo' OR 1=1 -- quindi non capisco se è meno grave del previsto oppure cosa??

  7. #7
    Se hai le magic_quote_gpc ad ON gia' queste da sole ti parano il 90% dei tentativi di injection. Tutti i caratteri di controllo usati vengono parsati e quindi diventano innoqui caratteri di testo.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    apparentemente è meno grave di quanto può sembrare perche di solito nel php.ini hai i magic quotes attivi:
    codice:
    magic_quotes_gpc = On
    questa impostazione aggiunge un backslash ad alcuni caratteri potenzialmente dannosi come l'apice o le virgolette, rendendo inutili alcuni tentativi di attacco.
    ciò non risolve comunque il problema: l'idea alla base di tutto, da applicare sempre e comunque, è che ogni input dell'utente deve essere controllato, filtrato, validato. se i magic quotes vengono per qualsiasi motivo disattivati, non hai piu questa (apparente) protezione.


    ---
    edit:
    attenzione che comunque con i magic_quotes o con le funzioni addslashes(), mysql_escape_string() e simili, non tutti i caratteri "pericolosi" vengono preceduti dall'escape, ad esempio il carattere % che si può utilizzare con le query LIKE
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  9. #9

    una domanda...

    utilizzando md5 per criptare la password i rischi di sql Injection dovrebbero essere uguali a 0...o sbaglio?
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  10. #10
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    a parte lo specifico caso di una tabella con user/password, le due cose non sono correlate.

    potresti avere un link del tipo news.php?id=123, dove $_GET['id'] dovrebbe essere un campo intero e quindi trattato come tale.

    sicuramente l'hashing delle password puo essere utile, ma resta il fatto che ogni input va validato e filtrato, solo allora sei (dovresti essere) al sicuro
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


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.