存储过程如下:
CREATE PROCEDURE Foo
@bar varchar(100)
AS
SELECT * FROM tablename
WHERE columnname LIKE '%' + @bar + '%'
我已经尝试将各种字符串传递给这个存储过程,但对我来说,看起来这样可以安全地从SQL注入,因为包含通配符之间的所有内容都会产生一个字符串。
答案 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'%%'会默认返回您数据库中的所有内容。