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

Sql server SQL Server如何防止动态SQL中的SQL注入,sql-server,sql-injection,Sql Server,Sql Injection,我有一个ASP.NETMVC应用程序,它使用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)

我有一个ASP.NETMVC应用程序,它使用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注入?

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

感谢你花时间把事情做好!!!太多的人只是盲目地将这种代码投入生产,他们的网站就被劫持了。