AWi*_*ter 3 sql t-sql sql-server
我正在制作SSRS报告,下面列出了存储过程.我的用户需要一个搜索工具,它会在名称字段中返回所有可能的结果,这样"AD"的名称应该返回"ADAM"和"MADELYN".
我担心因为我在where子句中使用字符串连接,这个存储过程是否可能成为SQL注入攻击的牺牲品:
BEGIN
@location varchar(20),@name varchar(20)
SELECT location, name
FROM table
WHERE (location LIKE @location+'%') AND (name LIKE '%'+@name+'%')
END
Run Code Online (Sandbox Code Playgroud)
这段代码容易受到攻击 如果是这样,我该如何解决它是安全的?
您发布的代码不易受SQL注入攻击.您在查询中使用的串联字符串值很好,只有在通过将字符串连接在一起构建查询时才会容易受到攻击.
对于驻留在T-SQL中的代码,这意味着除非您使用它们,EXEC否则sp_executeSQL您不太可能容易受到攻击.
一个与您的代码等效且易受SQL注入攻击的示例:
BEGIN --Don't do this!
@location varchar(20),@name varchar(20)
sp_executesql('
SELECT location, name
FROM table
WHERE (location LIKE ' + @location + '%'') AND (name LIKE ''%' + @name + '%''')
END
Run Code Online (Sandbox Code Playgroud)