SQL服务器如何防止sql动态注入sql
SQL Server How to prevent sql injection in dynamic sql
我有一个 ASP.Net MVC 应用程序,它使用 SQL 2012 作为数据库服务器。
我使用过视图、存储过程(With/Without 动态 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
我有一个 ASP.Net MVC 应用程序,它使用 SQL 2012 作为数据库服务器。 我使用过视图、存储过程(With/Without 动态 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