我是否需要将参数清理为SQL存储过程?

时间:2011-02-17 21:30:47

标签: 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.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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

在构建Sql语句时主要是在从用户(外部)提供参数时进行清理。