Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [php/mysql]SQL injection

    Ciao a tutti! Stò rendendo un sito più sicuro, per prima cosa ho provato a penetrare il sito senza la password, con le SQL injection. Anche se è senza protezione non capisco proprio ma le mie SQL injection non funzionano...

    Le stò attuando dalla pagina di login del mio sito:
    Codice PHP:
    //verifica utente
    $get_user mysql_query("SELECT * FROM `utenti` WHERE username = '".$_POST['username']."' AND user_password = '".md5($_POST['password'])."'");
    $q mysql_fetch_array($get_user);
    if(!
    $q) die("Login fallito ! Verifica se hai inserito correttamente il tuo username e password."); 
    Come avrete notato ho un form POST con i campi username e password: li ho compilati così:

    codice:
    username:  miousername'; DELETE FROM utenti WHERE username='miousername
    password:  password_qualsiasi
    Però niente! Non riesco a combinare nulla! Nemmeno inserendo la password corretta funziona!!


    Qualcuno può aiutarmi? Come posso proteggere il mio sito se non riesco a testare le mie misure di sicurezza!?

    Grazie mille!!

  2. #2
    Ti suggerisco di iniziare eseguendo un var_dump() della query SQL ed implementando il codice in modo che visualizzi eventuali messaggi di errore restituiti da mysql_query()

  3. #3
    Grazie del consiglio:
    ho scritto nel codice, proprio sotto la query nella quale effettuo le SQL injections
    Codice PHP:
    if(!$get_user) die('errore'.mysql_error()); 
    La query non restituisce alcun errore, il login però non avviene... Forse è perchè non riesce ad ottenere un mysql_fetch_array, essendo una query formata da due query... Questo però ancora non spiega perchè non elimina dal database la riga che gli dico di eliminare...

  4. #4
    Originariamente inviato da filippo.toso
    Ti suggerisco di iniziare eseguendo un var_dump() della query SQL ...

  5. #5
    Probabilmente magic_quotes_gpc e' attivo e quindi gli apici vengono automaticamente quotati tramite backslash.

  6. #6
    Grazie k.b, questo vuol dire che con questa impostazione attiva sono immune da SQL injecion?

  7. #7
    Nella maggior parte dei casi si, ma non sempre. magic_quotes_gpc non fa altro che usare la semplice addslashes() che non funziona con caratteri multibyte (Unicode), quindi in alcuni casi sono lo stesso possibili SQL injections.

    Poi la direttiva ha anche altri svantaggi: ad esempio non tutto l'input va messo in un DB, quindi ogni tanto ci si trovano backslash dove non dovrebbero essere. Inoltre e' una direttiva deprecata con PHP 5.3.0 e sara' rimossa con PHP 6, quindi meglio abituarsi a farne a meno.

    Per evitare le SQL injection le cose migliori da fare sono:
    1. filtrare l'input secondo logiche proprie adatte ad ogni specifico caso (nessuna direttiva generale sara' mai efficiente quanto una restrizione scritta apposta), ovviamente quando possibile
    2. usare mysql_real_escape_string
    3. usare prepared statements e bound parameters

  8. #8
    Solo una nota: attualmente le query multiple sono disabilitate, quindi non funzionerebbe indipendentemente dal backslash messo in automatico o meno.

    Ovviamente però le query di estrazione dati si possono sempre lanciare per far danni!

  9. #9
    Grazie mille a tutti e due!

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