SQL Server如何防止动态sql中的sql注入

时间:2015-07-10 18:59:21

标签: sql-server sql-injection

我有一个ASP.Net MVC应用程序,它使用SQL 2012作为数据库服务器。 我使用了视图,存储过程(有/没有动态sql查询)。我听说动态sql可能是sql注入的受害者。

以下是我的示例动态查询之一..

DECLARE @Username AS Varchar(100);
DECLARE @Password AS Varchar(100);

SET @Username = 'user1';
SET @Password = '123';

DECLARE @Query AS VARCHAR(MAX);

SET @Query = 'SELECT * FROM USERS WHERE Username ='+ @Username+ ' AND Password = '+@Password+';

EXEC(@Query)

如何编写此查询以防止sql注入?

1 个答案:

答案 0 :(得分:7)

这个前提在SQL中与在应用程序代码中基本相同...从不直接将输入连接为代码,而是将其视为参数。因此,如果您的查询是这样的:

SET @Query = 'SELECT * FROM USERS WHERE Username = @Username AND Password = @Password';

然后您可以使用sp_executesql

使用参数执行它
exec sp_executesql @Query, N'@Username varchar(100), @Password varchar(100)', @Username, @Password