【问题标题】:SQL Server How to prevent sql injection in dynamic sqlSQL Server如何防止动态sql中的sql注入
【发布时间】:2015-07-10 18:59:21
【问题描述】:

我有一个使用 SQL 2012 作为数据库服务器的 ASP.Net MVC 应用程序。 我使用过视图、存储过程(有/无动态 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-server sql-injection


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2018-08-21
    • 2011-06-12
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多