Vous êtes ici Forums
  |  Connexion
 Forums
HomeHomeForums DNNForums DNNDéveloppementDéveloppementsql injectionsql injection
Précédente
 
Suivante
Nouveau message
25/04/2007 10:47
 
sql injection  (N/A)
Salut à tous!

Je veux utiliser la fonction inputfilter de portalsecurity, mais je dois mal l'utiliser car elle semble ne pas marcher. J'ai le code suivant :

Dim objSecurity as new PortalSecurity

myParam = objSecurity.InputFilter(myParam, PortalSecurity.FilterFlag.NoSQL)

Avec myParam = '; shutdown ; -- dans mon formulaire.

Or, même en utilisant cette fonction, la commande sql est exécutée. Comment bien utiliser cette fonction?

Merci de m'éclairer sur ce point si vous savez :)

le tournevice
 
Nouveau message
26/04/2007 10:48
 

Bonjour,

Le code semble bon !?  Une question : étais-tu connecté en tant d'admin ou host lors de tes tests ?

Gilles

 
Nouveau message
26/04/2007 11:05
 
Oui, il me semble.
 
Nouveau message
26/04/2007 11:07
 

Heuuuu Il te semble quoi ? Que le code est bon ou que tu étais connecté en admin ?

Gilles

 
Nouveau message
26/04/2007 11:15
 
Oups! Je suis connecté en host quand j'utilise inputfilter.
 
Nouveau message
26/04/2007 11:29
 

Bon j'ai trouvé d'où vient le problème !

Voici le code de la fonction (fichier PortalSecurity.vb) qui "nettoie" les saisies des commandes SQL dans dnn 4.4.1 (je n'ai pas encore eu le temps de tester la v 4.5.1) :

        Private Function FormatRemoveSQL(ByVal strSQL As String) As String

            Dim strCleanSQL As String = strSQL

            If strSQL <> Nothing Then

                Dim BadCommands As Array = Split(";,--,create,drop,select,insert,delete,update,union,sp_,xp_", ",")

                ' strip any dangerous SQL commands
                Dim intCommand As Integer
                For intCommand = 0 To BadCommands.Length - 1
                    strCleanSQL = Regex.Replace(strCleanSQL, Convert.ToString(BadCommands.GetValue(intCommand)), " ", RegexOptions.IgnoreCase)
                Next

                ' convert any single quotes
                strCleanSQL = Replace(strCleanSQL, "'", "''")
            End If

            Return strCleanSQL

        End Function

Comme tu peux t'en rendre compte, la présence de la commande shutdown n'est pas testée ! Il faudrait remonter le problème aux us dans le forum adéquat et sur Gemini. Tu t'en charge ? En attendant une correction, tu peux reprendre le code ci-dessus en ajoutant "shutdown" à la liste. Il faudra alors appeler ta fonction à la place d'InputFilter avec le flag NoSQL.

Gilles

 
Nouveau message
26/04/2007 11:46
 
Arf, sans le savoir, j'ai découvert une ano! :)

Si j'ai le temps dans la journée, je posterai l'ano.

Merci encore!

le tournevice
 
Nouveau message
26/04/2007 13:53
 

Entre deux coups de couteau (à enduire) et un peu de poncage, je viens de penser à un truc. Y a pas mieux que le travail manuel pour réfléchir !

Il serait mieux de traiter le problème avec une regex. Car sauf erreur de ma part, si tu saisi la phrase suivante dans ton champs :

I can't create, update or drop a table in my database; but I can insert record.

Devrait être retournée comme suit parès le passage dans l'actuelle fonction :

I can't , or a table in my database but I can record.

Me trompe-je ?

Il serait préférable d'utiliser une regex du style :

"(\-\-|;)\s*(create|drop|select|insert|delete|update|union|shutdown|sp_|xp_)"

Ou du moins quelque chose du même genre, il faudrait tester tous les cas possibles. Ce qui nous donnerait la fonction suivante :

        Private Function FormatRemoveSQL(ByVal strSQL As String) As String

            Dim strCleanSQL As String = strSQL
            Dim strRegExSQL As String =  "(\-\-|;)\s*(create|drop|select|insert|delete|update|union|shutdown|sp_|xp_)"
            Dim options As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Singleline

            If strSQL <> Nothing Then
               strCleanSQL = Regex.Replace(strSQL, strRegEx, " ", options)
            End If

            Return strCleanSQL

        End Function

Gilles

 
Précédente
 
Suivante
HomeHomeForums DNNForums DNNDéveloppementDéveloppementsql injectionsql injection