我是否需要清理SQL存储过程中的参数?

我是否需要清理SQL存储过程中的参数?,sql,stored-procedures,parameters,sql-injection,Sql,Stored Procedures,Parameters,Sql Injection,我正在用ASP(经典)Javascript编写一个快速网站 我正在使用一个带参数的预处理语句。没什么特别的 我的问题是我是否需要清理参数的输入(如果需要,PHP中是否有类似的本机函数?),或者我使用的是参数而不是串联内联SQL这一事实是否让我更安全 //Set up the command to run the GetMigrationDate stored procedure. var command = new ActiveXObject("ADODB.Command"); command.

我正在用ASP(经典)Javascript编写一个快速网站

我正在使用一个带参数的预处理语句。没什么特别的

我的问题是我是否需要清理参数的输入(如果需要,PHP中是否有类似的本机函数?),或者我使用的是参数而不是串联内联SQL这一事实是否让我更安全

//Set up the command to run the GetMigrationDate stored procedure.
var command = new ActiveXObject("ADODB.Command");
command.CommandText = "exec myStoredProc ?";

//Set up parameters
command.Parameters.Append(command.CreateParameter("name", 200, 1, 255));
command.Parameters("name") = name;

//Set up result recordset
var results = new ActiveXObject("ADODB.Recordset");

//Run command
results.open(command);
[编辑] 存储过程如下所示:

@name varchar(255)

select * from customers where name = @name

存储过程正在使用绑定变量,并且没有从传入的参数生成SQL语句,因此不需要清理参数以避免SQL注入


在其他情况下,您可能出于其他原因需要对其进行清理(例如,如果“名称”是显示的内容,并且您希望避免有人在一个小Javascript程序中键入一个字段,然后该字段又被显示回来,则会发生攻击)。正常地这将在实际呈现字段的代码中得到处理,但确保您没有在数据库中存储恶意Javascript是一个很好的备份。

您的存储过程正在使用绑定变量,并且没有从您传入的参数中构建SQL语句,因此您不需要清理参数以避免SQL注入


在其他情况下,您可能出于其他原因需要对其进行清理(例如,如果“名称”是显示的内容,并且您希望避免有人在一个小Javascript程序中键入一个字段,然后该字段又被显示回来,则会发生攻击)。通常,在实际呈现字段的代码中会考虑到这一点,但确保您没有在数据库中存储恶意Javascript是一个很好的备份。

在构建Sql语句时,主要是在用户(外部)给出参数时,会进行清理

清理是在构建Sql语句时完成的,主要是在用户(外部)给出参数时完成的

我添加了一些类似于我正在使用的SP的内容。我不是100%的绑定变量。你能详细解释一下吗?@ChristainLinnell-更新了我的答案。没有必要对这个特定过程的输入进行消毒。我添加了一些类似于我正在使用的SP的东西。我不是100%的绑定变量。你能详细解释一下吗?@ChristainLinnell-更新了我的答案。无需对该特定程序的输入进行消毒。