这个存储过程是否可以安全地从SQL注入?

时间:2010-11-01 21:58:39

标签: sql-server stored-procedures sql-injection

存储过程如下:

CREATE PROCEDURE Foo
    @bar varchar(100)
AS

SELECT * FROM tablename
WHERE columnname LIKE '%' + @bar + '%'

我已经尝试将各种字符串传递给这个存储过程,但对我来说,看起来这样可以安全地从SQL注入,因为包含通配符之间的所有内容都会产生一个字符串。

2 个答案:

答案 0 :(得分:7)

如果您使用的是C#,您的代码如下所示:

SqlCommand command = new SqlCommand("Foo", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@bar", myTextBox.Text);

然后是的!

如果它看起来像这样:

SqlCommand command = new SqlCommand("EXEC Foo '" + myTextBox.Text + "'", connection);

然后没有!

答案 1 :(得分:4)

是的,这会将@bar中的所有数据解释为单个varchar(100)值。您仍应确保在您的应用中传递了一些内容,因为 LIKE'%%'会默认返回您数据库中的所有内容。