Recherche…


Introduction

Les requêtes paramétrées peuvent être utilisées pour se défendre contre les attaques par injection SQL.

Approche vulnérable: chaîne SQL concaténée avec références de formulaire

C'est l'approche typique pour les développeurs novices qui créent des requêtes d'action SQL. Ils sont vulnérables aux attaques par injection SQL de type Bobby Tables .

Dim strSQL As String

strSQL = "INSERT INTO Employees chrFirstName, chrLastName, chrPhone " _
         & "VALUES ('" & Me!txtFirstName & "','" & Me!txtLastName & "','" & Me!txtPhone & "');"

CurrentDb.Execute strSQL

QueryDef Approche de requête paramétrée

Cette approche empêchera un utilisateur d'incorporer une seconde instruction SQL dans ses entrées pour l'exécution.

Dim strSQL As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef

strSQL = "PARAMETERS [FirstName] Text(255), [LastName] Text(255), [Phone] Text(255); " _
         & "INSERT INTO Employees (chrFirstName, chrLastName, chrPhone) " _
         & "VALUES ([FirstName], [LastName], [Phone]);"

Set db = CurrentDb

Set qdf = db.CreateQueryDef("", strSQL)
qdf.Parameters("FirstName") = Me!txtFirstName
qdf.Parameters("LastName") = Me!txtLastName
qdf.Parameters("Phone") = Me!txtPhone
qdf.Execute

Me!txtFirstName = vbNullString
Me!txtLastName = vbNullString
Me!txtPhone = vbNullString

qdf.Close
db.Close
Set qdf = Nothing
Set db = Nothing

Types de paramètres valides:

  • DATETIME : pour les dates (le paramètre attend la Date VBA)
  • SHORT , LONG : Pour les entiers ( SHORT attend Integer, LONG attend Long)
  • SINGLE , DOUBLE : Pour virgule flottante (attendez-vous à Simple et Double respectivement)
  • VARCHAR ou TEXT : pour les chaînes
  • MEMO ou LONGTEXT : Pour les chaînes de plus de 255 caractères


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow