2013-03-28 4 views
0

J'essaie de sécuriser un site Web Classic ASP/VBScript en paramétrant les instructions SQL.

J'ai la fonction suivante:Comment utiliser un objet ADODB.CommandObject avec ADODB.RecordSet?

Function OpenUpdateableRS(strSQL) 
    Dim rs 
    Set rs = Server.CreateObject("ADODB.Recordset") 
    rs.Open strSQL, cnDZ, adOpenKeyset, adLockPessimistic, adCmdText 
    Set OpenUpdateableRS = rs 
    Set rs = Nothing 
End Function

Je l'intention de le convertir en quelque chose comme:

Function SecureOpenUpdateableRS(strSQL, strParam1, strParam2) 
    Dim rs 
    Dim cmdOB 
    Set cmdOB = Server.CreateObject("ADODB.CommandObject") 
    With cmdOB 
     .ActiveConnection = cnDZ 
     .CommandText = strSQL 
     .Parameters(0).value = strParam1 
     .Parameters(0).value = strParam2 
    End With 
    Set rs = Server.CreateObject("ADODB.Recordset") 
    rs.Open cmdOB.Execute, , adOpenKeyset, adLockPessimistic 
    Set SecureOpenUpdateableRS = rs 
    Set rs = Nothing 
End Function 

Quand j'appelle la fonction avec:

 
Set rs = SecureOpenUpdateableRS("SELECT CustID, LastActive, LoggedIn, SessionID FROM tblLogins WHERE EMail = ? AND PWord = ?", strEMail, strPassword) 

I obtenir un "500 - Erreur interne du serveur" qui est probablement parce que je débogage désactivé sur le serveur.
Des idées sur comment rendre la fonction d'origine plus sûre sans la casser?

Répondre

1

Vous devrez créer les paramètres et les ajouter à la collection de paramètres de la commande. Le simple fait d'attribuer les valeurs au paramètre (le même!) Ne peut pas fonctionner. Google pour un échantillon; peut-être this VB! sample va vous aider à démarrer.

Ajouté:

je peux penser à deux stratégies pour obtenir les types de paramètres:

  1. Si vous passez les correctes/maximum spécifiées valeurs des paramètres à la fonction que vous pouvez mapper VarType(value) constantes pour les constantes de type de paramètre
  2. Si vous sélectionnez SELECT en fonction des noms de champ dans le texte de la commande, vous pouvez mapper le champ du jeu d'enregistrements .Type s au paramètre Constantes de type

Il ne sera pas trivial d'obtenir ce droit pour tous les cas possibles. Je passerais des paires de valeur et de type désiré à la fonction.

+0

Merci pour la réponse rapide. Est-il possible que je peux utiliser des instructions paramétrées sans être sûr du type des paramètres d'entrée? – Vinayak

+0

Comme le code sur cette page StackOverflow: http://stackoverflow.com/questions/11020846/classic-asp-protection-against-sql-injection – Vinayak

Questions connexes