ms-access
Requêtes paramétrées
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 laDateVBA) -
SHORT,LONG: Pour les entiers (SHORTattend Integer,LONGattend Long) -
SINGLE,DOUBLE: Pour virgule flottante (attendez-vous à Simple et Double respectivement) -
VARCHARouTEXT: pour les chaînes -
MEMOouLONGTEXT: 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