Asp classic 如何在经典asp中生成防止sql注入的准备语句?
我有一个有效的方法:Asp classic 如何在经典asp中生成防止sql注入的准备语句?,asp-classic,sql-injection,Asp Classic,Sql Injection,我有一个有效的方法: 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 我遇到
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
我遇到的问题是,sqlString
的动态部分在prepared语句命令之前。我不认为我上面所说的是在保护我
在执行准备好的语句之前,我不需要修复这个sqlString吗?读了这篇文章,我想:
“对于准备好的声明,我们不会改变我们的程序,但它保持不变
这就是重点
我们首先将程序发送到服务器
$db->prepare("SELECT * FROM users where id=?");
其中数据被称为“占位符”的变量替换
然后我们分别发送数据:
$db->execute($data);
所以,它不能改变我们的程序,也不会造成任何伤害。
很简单,不是吗?”
但我不知道如何使我的疑问正确。我也不知道他是如何从
prepare
到$data
的。他希望得到指导。谢谢。这里有一个关于如何使用经典asp防止sql注入的好博客
为什么不使用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
最简单的方法是在SQL中使用存储过程,并以这种方式使用命令。。否则,您必须转义从请求对象收集的某些字符,如单引号和双连字符等。我将尝试。谢谢未定义的内容,202,1,50,?oCmd.CreateParameter([name]、[type]、[direction]、[size]、[value])这将是一个很好的链接好教程的地方。另请参见VBS示例。