gpt4 book ai didi

sql - 避免 MS Access 中的 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-12-02 03:36:02 26 4
gpt4 key购买 nike

我试图更好地理解参数化 SQL 作为 SQL 注入(inject)的解决方案。

假设我有一个 tblCustomer与字段 CustName , PhoneAddress 。还可以说我有一个供新客户输入数据的输入表单,其控件名为 txtName , txtPhonetxtAddress .

可以运行以下 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 参数,但它们对我没有帮助。因此,当人们说使用参数来解决问题时,他们的意思是什么?

最佳答案

使用带有位置参数的预准备语句可以消除有人对您进行 SQL 注入(inject)的机会:

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

关于sql - 避免 MS Access 中的 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50166009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com