我是否容易受到SQL注入?

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)

这段代码容易受到攻击 如果是这样,我该如何解决它是安全的?

All*_*lan 5

您发布的代码不易受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)