我试图更好地理解参数化 sql 作为 SQL 注入的解决方案。
可以说我有一个tblCustomer
与田野CustName
, Phone
and Address
。还可以说我有一个输入表单供新客户输入他们的数据,其中的控件称为txtName
, txtPhone
and txtAddress
.
I could运行以下 vba 代码:
dim strName, strPhone strAddress, strSQL as string
strName = me.txtName
strPhone = me.txtPhone
strAddress = me.txtAddress
strSQL = "INSERT INTO tblCustomer (CustName, Phone, Address) _
VALUES (" & strName & ", " & strPhone & ", " & strAddress & ");"
DoCmd.RunSQL strSQL
但如果有人指定地址“Robert'); DROP TABLE tblCustomer; --”(眨眼)我就会遇到一些严重的问题。
我使用过 vba 参数,但它们对我没有帮助。因此,当人们说使用参数来解决问题时,什么是do他们的意思是?
使用带有位置参数的准备好的语句可以消除有人 SQL 注入的机会:
strSQL = "INSERT INTO tblCustomer (CustName, Phone, Address) " &
"VALUES ([str_name], [str_phone], [str_address]);"
Set qdf = db.CreateQueryDef(vbNullString, strSql)
With qdf
.Parameters("str_name").Value = strName
.Parameters("str_phone").Value = strPhone
.Parameters("str_address").Value = strAddress
.Execute dbFailOnError
End With
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)