我试图更好地理解参数化 sql 作为 SQL 注入的解决方案。
可以说我有一个tblCustomer
字段CustName
,Phone
和Address
。还可以说我有一个供新客户输入数据的输入表单,其中的控件名为txtName
、txtPhone
和txtAddress
。
我可以运行以下 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
Run Code Online (Sandbox Code Playgroud)
但是如果有人指定地址“Robert'); DROP TABLE tblCustomer; --”(眨眼)我就会遇到一些严重的问题。
我使用过 vba 参数,但它们对我没有帮助。那么,当人们说使用参数来解决问题时,他们的意思是什么?
使用带有位置参数的准备好的语句可以消除有人 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3837 次 |
最近记录: |