Buscar..


Introducción

Las consultas parametrizadas se pueden usar para defenderse de los ataques de inyección de SQL.

Enfoque vulnerable: cadena SQL concatenada con referencias de formulario

Este es el enfoque típico para los desarrolladores novatos que crean consultas de acción SQL. Son vulnerables a los ataques de inyección SQL del tipo Bobby Tables .

Dim strSQL As String

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

CurrentDb.Execute strSQL

QueryDef Parameterized Enfoque de consulta

Este enfoque evitará que un usuario incruste una segunda instrucción SQL en su entrada para la ejecución.

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

Tipos de parámetros válidos:

  • DATETIME : para las fechas (el parámetro espera la Date VBA)
  • SHORT , LONG : para enteros ( SHORT espera un entero, LONG espera un largo)
  • SINGLE , DOUBLE : para punto flotante (espera Single y Double respectivamente)
  • VARCHAR o TEXT : para cuerdas
  • MEMO o LONGTEXT : para cadenas de más de 255 caracteres


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow