如何在经典的asp中制作一个预防sql注入的预备语句?

joh*_*nny 3 sql-injection asp-classic

我有这个有效:

sqlString = "SELECT * FROM employees WHERE lastname = '" & last_name & "'"
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = dbConn
cmd.CommandText = sqlString
cmd.Prepared = True
Set recs = cmd.Execute
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是在动态部分之上sqlString是在准备好的语句命令之前.我不认为我上面的东西在保护我.

在执行预准备语句之前,我不必修复此sqlString吗?阅读本文让我想到: 准备好的语句如何防止SQL注入攻击?:

"虽然在准备好的陈述中,我们不会改变我们的计划,但它仍然完好无损.这就是重点.

我们首先将程序发送到服务器

 $db->prepare("SELECT * FROM users where id=?");
Run Code Online (Sandbox Code Playgroud)

数据被称为"占位符"的变量替换,然后我们分别发送数据:

 $db->execute($data);
Run Code Online (Sandbox Code Playgroud)

所以,它不能改变我们的计划并造成任何伤害.很简单 - 不是吗?"

但我不知道如何使我的查询正确.我也不知道他是怎么prepare来的$data.希望得到指导.谢谢.

aep*_*eus 10

为什么不使用ADO命令参数?

var oCmd = Server.CreateObject("ADODB.Command");
oCmd.CommandText = "SELECT * FROM employees WHERE lastname = ?";
oCmd.Parameters.Append(oCmd.CreateParameter(undefined,202, 1, 50,"last name"))//adVarWChar
Run Code Online (Sandbox Code Playgroud)