ms-access
Zapytania sparametryzowane
Szukaj…
Wprowadzenie
Zapytania sparametryzowane mogą służyć do obrony przed atakami SQL Injection.
Podejście podatne: połączony ciąg SQL z odwołaniami do formularza
Jest to typowe podejście dla początkujących programistów budujących zapytania dotyczące akcji SQL. Są podatne na ataki typu Bobby Tables typu SQL Injection.
Dim strSQL As String
strSQL = "INSERT INTO Employees chrFirstName, chrLastName, chrPhone " _
& "VALUES ('" & Me!txtFirstName & "','" & Me!txtLastName & "','" & Me!txtPhone & "');"
CurrentDb.Execute strSQL
QueryDef Sparametryzowane podejście do zapytania
Takie podejście zapobiegnie osadzeniu przez użytkownika drugiej instrukcji SQL w danych wejściowych do wykonania.
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
Prawidłowe typy parametrów:
-
DATETIME: dla dat (parametr oczekujeDateVBA) -
SHORT,LONG: Dla liczb całkowitych (SHORToczekuje liczby całkowitej,LONGoczekuje długości) -
SINGLE,DOUBLE: Dla liczb zmiennoprzecinkowych (należy oczekiwać odpowiednio Single i Double) -
VARCHARlubTEXT: Dla ciągów -
MEMOlubLONGTEXT: Dla ciągów dłuższych niż 255 znaków
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow