SQL Server如何防止动态sql中的sql注入
Posted
技术标签:
【中文标题】SQL Server如何防止动态sql中的sql注入【英文标题】:SQL Server How to prevent sql injection in dynamic 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 注入?
【问题讨论】:
blogs.msdn.com/b/raulga/archive/2007/01/04/… 感谢您花时间做出正确的决定!!!太多人只是盲目地将这种代码投入生产,他们的网站就会被劫持。 【参考方案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
【讨论】:
以上是关于SQL Server如何防止动态sql中的sql注入的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2017 - 如何在动态 SQL 中的 SELECT 中传递参数
如何防止将重复数据插入到值为多个的 SQL Server 表中