Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    Query parametrizzate per SQL injection

    Ciao a tutti,
    ho da poco subito un attacco sul mio sito con la tecnica dell'SQL injection, cosa dalla quale pensavo di essermi tutelato avendo adottato quelle che credevo essere le basilari norme di sicurezza, e così mi stanno venendo mille dubbi su come imposto le mie procedure di interrogazione al DB.

    Vi posto il seguente esempio, che è il nocciolo della funzione per la verifica del login utente, e vi chiedo se è parametrizzata "a dovere", cioè se effettivamente possa così strutturata essere blindata dagli attacchi.

    Naturalmente rimango aperto ad ogni consiglio e/o link utile per studiare meglio l'argomento.

    Grazie mille.



    codice:
    Try
    
     
       cmd_Legge.Connection = cn
     
       cn.Open()
    
       '
       SQL_Legge &= "SELECT *"
       SQL_Legge &= "FROM tbUtenti "
       SQL_Legge &= "WHERE "
       SQL_Legge &= "NomeUtente = @NomeUtente "
       SQL_Legge &= "AND "
       SQL_Legge &= "PasswordUtente = @PasswordUtente"
       '
       cmd_Legge.Parameters.AddWithValue("@NomeUtente", SqlDbType.NVarChar).Value = NomeUtente
       cmd_Legge.Parameters.AddWithValue("@PasswordUtente", SqlDbType.NVarChar).Value = PasswordUtente
       '
       cmd_Legge.CommandText = SQL_Legge
       dr_Legge = cmd_Legge.ExecuteReader
    
       If dr_Legge.Read Then
         IDUtente = dr_Legge.Item("IDUtente")
         Return True
       Else
         Return False
       End If
       '
       If Not (dr_Legge Is Nothing) Then dr_Legge.Close()
    
     Catch ex As Exception
    
        ' Visualizza Messaggio di Errore
        '
        MessageBox.Show(ex.Message)
    
     Finally
    
        ' Chiude la connessione se aperta
        '
        If Not (cn Is Nothing) Then cn.Close()
    
     End Try
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  2. #2
    se dalla form arriva

    @NomeUtente ---> '' OR 1=1; --
    @PasswordUtente ---> ''

    la tua query diventa

    SELECT * FROM tbUtenti WHERE NomeUtente = '' OR 1=1; -- AND PasswordUtente = ''

    che è soddisfatta.


  3. #3
    Chiarissimo, il tuo esempio non fa una piega. Io comunque in lettura del NomeUtente faccio un replace sui caratteri apice, "--", "@" ecc... prima di passarlo al parametro.

    Ma allora non basta, dov'è l'inghippo?

    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  4. #4
    fa' una cosa: se l'inghippo sta nel contenuto di NomeUtente e/o PasswordUtente, salvateli in un file, così vedi come riescono ad entrare.

  5. #5
    Originariamente inviato da optime
    se dalla form arriva

    @NomeUtente ---> '' OR 1=1; --
    @PasswordUtente ---> ''

    la tua query diventa

    SELECT * FROM tbUtenti WHERE NomeUtente = '' OR 1=1; -- AND PasswordUtente = ''

    che è soddisfatta.

    Ciao optime,

    non mi risulta che succeda questo usando i parametri (almeno non succede con sql server usando le sp);

    il problema si ha invece se si costruisce la query da codice come segue :

    codice:
       SQL_Legge &= "SELECT *"
       SQL_Legge &= "FROM tbUtenti "
       SQL_Legge &= "WHERE "
       SQL_Legge &= "NomeUtente = "  & varNomeUtente 
       SQL_Legge &= "AND "
       SQL_Legge &= "PasswordUtente = " &  varPasswordUtente 
    ma questa è molto diversa da quella che usa i parametri.

    Se mi sbaglio sono ovviamente molto graditi altri commenti

  6. #6
    @sspintux --> osservazione corretta

  7. #7
    Scusate ma allora torniamo alla domanda di partenza! Dov'è l'inghippo? (sempre che ci sia)

    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  8. #8
    spiegaci l'attacco subìto

  9. #9
    guest.1
    Guest
    salve, mi avevano detto una volta che e meglio far passare i campi richiesti ad es:
    riprendo il codice soprapposto:
    codice:
    SQL_Legge &= "SELECT NomeUtente,PasswordUtente"
       SQL_Legge &= "FROM tbUtenti "
       SQL_Legge &= "WHERE "
       SQL_Legge &= "NomeUtente = "  & varNomeUtente 
       SQL_Legge &= "AND "
       SQL_Legge &= "PasswordUtente = " &  varPasswordUtente
    Cosi non possono richiamare altri campi.

    Lo visto usare in php. poi in asp net non so se si fà la stessa cosa, ma penso di si perchè tanto è una query.

    Io sto faccendo cosi.
    Non uso * , se no è quello il rischio.(forse).

    Saluti,
    luigi.
    Buona giornata.

  10. #10
    Originariamente inviato da luigi.amorfini
    salve, mi avevano detto una volta che e meglio far passare i campi richiesti ad es:
    riprendo il codice soprapposto:
    codice:
    SQL_Legge &= "SELECT NomeUtente,PasswordUtente"
       SQL_Legge &= "FROM tbUtenti "
       SQL_Legge &= "WHERE "
       SQL_Legge &= "NomeUtente = "  & varNomeUtente 
       SQL_Legge &= "AND "
       SQL_Legge &= "PasswordUtente = " &  varPasswordUtente
    Cosi non possono richiamare altri campi.

    Lo visto usare in php. poi in asp net non so se si fà la stessa cosa, ma penso di si perchè tanto è una query.

    Io sto faccendo cosi.
    Non uso * , se no è quello il rischio.(forse).

    Saluti,
    luigi.
    Buona giornata.
    sinceramente non ho capito cosa vuoi dire,
    ma sono sicuro che costruire una query da codice come quella qui sopra è a rischio.

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.